2013-02-17 46 views
2

在我的程序中有一些用戶及其客戶。 我有用戶及其關聯客戶端的列表。哪些數據結構應該使用multimap,boost :: bimap,multiset或其他

U1 -> c1, c2, c3, c5, c8, c10, c12 
U2 -> c3, c5, c13, c8, c12, c14 
U3 -> C2, C5, c8, c11, c12, c14 
.. 
... 
.... 
..... 
and many more. 

一些客戶端在用戶列表中常見的。

我想爲客戶建立反向層次結構。 如果任何客戶端有任何更新,那麼它只會發送給客戶端關聯的那些用戶。

請建議我該數據結構要使用的地圖,多重映射,提振:: bimap中,多集

+0

我覺得你需要一個數據庫:) – billz 2013-02-17 11:32:03

回答

1

也許這是一個用例的Boost.Bimap其中兩個鍵是多集,並在bimap的一個條目表示用戶和客戶端之間的單一連接。因此,對於以下設置

U1 -> C1 C2 C3 
U2 -> C4 C1 
U3 -> C5 C1 

你將有條目(U1, C1)(U1, C2)(U1, C3)(U2, C4)(U2, C1)(U3, C5)(U3, C1)

您可以按順序遍歷兩個鍵,即左側的U1, U1, U1, U2, U3和右側的C1, C1, C1, C2, C3, C4, C5。 (請注意雙方如何包含重複條目!)

0

你所需要的是什麼,其實是bimultimap,我相信沒有在提升中實現這樣的事情。我建議你有一個map<int, vector<int> > user_clients(這裏當然地圖也可能是unordered_map)和另一個地圖:map<int, vector<int> > client_users。你將不得不保持同步。可能創建一個包裝類來爲你做這件事是最好的選擇。

0

你需要bi * *地圖如Ivaylo Strandjev所說,事實上有一個。你需要的是

boost::bimap<multiset_of<User>, multiset_of<Client>> 
+0

我認爲雙方都必須是* multi * -sets。 – 2013-02-17 11:28:20

+0

是@Kerrek,你是對的。我認爲bimap有點聰明。 – ixSci 2013-02-17 11:37:15

相關問題