我具有與在下面的結構的數據涉及的應用程序:爲多級遍歷數據結構
struct Message
{
int time;
string name;
string details;
};
例如,我可以具有數據集如下所示:
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>
而且我將列出代表數據集中每行的Message
結構。
有些操作我需要在這個數據確實包括:
- 收集的所有數據按照時間順序和
dostuff()
- 從時間順序
John
(或任何人),並dostuff()
因此,我需要一種遍歷列表的方式,以便我可以按時間順序傳遞每封郵件,並且還可以選擇一個人,並按照時間順序僅傳遞其郵件。
我的想法是有這樣的結構:
struct Node
{
Message* message;
Node* next_time;
Node* next_name;
};
在這next_time
點,按時間順序排列的下一個Node
,並且next_name
分屬於message->name
下一個Node
。一個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;
};
這是一張圖片來說明這一點。
這種結構可以讓我的每封郵件很容易穿越的,或只通過Bob的郵件,或者只約翰等
不過,我很擔心,也許這是比它更復雜需要是。我也擔心維護(見下文)。我需要搜索/選擇/讀取操作非常快,我認爲他們是。我需要插入操作相當快。但是現在,我插入每個Message
,我必須(1)更新一些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
你需要高效的隨機插入還是隻需追加? –