在我的程序中有一些用户和他们的客户。 我有用户列表及其相关客户。
实施例
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
答案 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>>