私は、次のような構造のデータを扱うアプリケーションがあります。データ構造
9:00:00 Bob <Info>
9:01:00 John <Info>
9:05:00 Bob <Info>
9:11:00 Mary <Info>
9:17:00 John <Info>
9:25:00 Mary <Info>
9:30:00 Bob <Info>
:
struct Message
{
int time;
string name;
string details;
};
例えば、私は次のようなデータセットを持っていることを
そして私は、データセット内の各行を表すMessage
構造体のリストを持っています。私はこのデータに行う必要があります
一部の操作が含まれます:
- は年代順にすべてのデータを収集し、
dostuff()
- は
John
(または誰でも)からのすべてのデータを収集し、時系列順とdostuff()
だから、私は年代順にすべてのメッセージを渡すことはなく、また、人を選択し、年代順にだけ彼らのメッセージを通過することができるようにリストをトラバースする方法が必要です。 message->name
に属し次Node
に年代順に次のNode
にnext_time
ポイントで
struct Node
{
Message* message;
Node* next_time;
Node* next_name;
};
、およびnext_name
ポイント:
私の考えでは、このような構造体を持っています。そしてRoot
構造は、各タイプの最初を指します。
struct Root
{
Node* first_time;
Node* first_bob;
Node* first_john;
Node* first_mary;
Node* last_time;
Node* last_bob;
Node* last_john;
Node* last_mary;
};
ここにポイントを説明する画像があります。
この構造はしかし、私は多分これはそれよりも複雑であることを心配して、私はかなり簡単にすべてのメッセージを通して、またはなどのみボブのメッセージ、またはのみジョンズを通じて
を横断することができます必要があります。私はまた、メンテナンスについて懸念があります(下記参照)。私は、検索/選択/私は、彼らがいると思うれ、非常に高速であることを読み取り操作を必要としています。そして、私は合理的に速いために挿入操作が必要です。しかし今は、私が挿入するすべてのMessage
のために、私はいくつかのnext_time
ポインタを更新し、(2)いくつかnext_name
ポインタを更新する必要があります。
私の質問は すでにこの種の機能を提供するデータ構造が存在していますか?そうでない場合、私はこの問題に正しく遭遇していますか?
可能であれば、C++またはC#でコードサンプルを提供してください。
ありがとうございました。
追加:後で私のMessage
構造体に追加したいとします。 City
というフィールドを追加したとします。今、私はこれをやってみたいことがあります。
- は年代順に特定
City
からすべてのデータを収集し、dostuff()
これはnext_city
を追加することが必要になり、その後、すべての挿入のために、私がしなければなりません更新next_time
,next_name
、およびnext_city
。
- が、私はこれは非常に多くの困難な問題になると思う特定の
City
と時系列順に特定name
とdostuff()
からすべてのデータを収集します。また、
は、私はこれをしたいと仮定します私はすべてのMessage
をトラバースし、私が気にしないものを飛ばすことを選択しない限り。
どのように多くの別のユーザーが存在するでしょうか?数字が小さい場合は、興味のないメッセージをスキップするだけで済むかもしれません。 – takteek
@takteek:私はそれについて考えました - 人/ユーザー/名前の数は任意で、各人物の「メッセージ」の数は非常に多くなります。可能なのは、 'Messages'のトンをスキップすることです。 – user807566
効率的なランダム挿入や追加だけが必要ですか? –