哪个数据结构应该使用multimap,boost :: bimap,multiset或任何其他

时间:2013-02-17 11:17:22

标签: c++ boost stl bimap

在我的程序中有一些用户和他们的客户。 我有用户列表及其相关客户。

实施例

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.

某些客户在用户列表中很常见。

我想为用户制作客户端的反向层次结构。 如果任何客户端有任何更新,那么它将只发送给客户端所关联的用户。

请建议我应该使用哪种数据结构map,multimap,boost :: bimap,multiset

3 个答案:

答案 0 :(得分: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)。< / p>

您可以按顺序遍历两个键,即左侧的U1, U1, U1, U2, U3和右侧的C1, C1, C1, C2, C3, C4, C5。 (注意双方如何包含重复的条目!)

答案 1 :(得分:0)

这里你需要的是一个bimultimap,我相信在boost中没有实现这样的东西。我建议你有一个map<int, vector<int> > user_clients(当然这里的地图也可能是unordered_map)和另一张地图:map<int, vector<int> > client_users。你必须让它们保持同步。可能创建一个包装类来为你做这个是最好的选择。

答案 2 :(得分:0)

你需要bi * multi *地图,正如Ivaylo Strandjev所说,事实上还有一个。你需要的是

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