元素中的元素是否可以搜索?需要它吗?

时间:2011-06-06 23:15:56

标签: c++ containers

如果我有Key-> Elements

A->B,C,D,E  

B,C,D,E是可搜索的,即它们是否插入红色和黑色的树中。

我认为答案是肯定的。我想我需要一个

multimap<string,map>

使值部分有效地可搜索(即红色和黑色树的一部分)

A->B,C,D
B->C,D
C->D
D->E

如果我使用集合图,这将最好地描述这个结构。地图的每个键都指向一个集合。每组基本上都是元素列表。因为我想高效搜索和插入我使用std :: map和std :: set而不是std :: list和std :: list。

3 个答案:

答案 0 :(得分:2)

不 - 地图和多图都不会这样做。你需要像Boost bimap这样的东西。

答案 1 :(得分:1)

  

我想我需要一个multimap<string,map>来使值部分有效搜索(即红色和黑色树的一部分)

你是对的。

  

但是如果他们的键和值都在奥得河那么我需要一个关联容器。使用矢量不是更好吗?

如果它们有序,并且您不打算快速添加或删除元素,那么是 - <algorithm>中的二分搜索(在vector中提供)可能会超出预期map查找。

答案 2 :(得分:1)

如果您希望值部分是具有有效查找时间的序列,则可以使用

multimap<string, set>

如果值序列的元素是唯一的,或

multimap<string, multiset>

如果没有。这将为您提供对数查找时间和对数插入(这可能更好或更差,具体取决于插入类型,请查看std::setstd::multiset文档)。这些集的行为与std::maps非常相似,只不过每个元素的值都是它的键。