可以在多重映射中搜索元素吗?需要吗?
如果我有 Key->Elements
A->B,C,D,E
Are B,C,D,E searchable ,即它们是否插入到红黑树中。
我想答案是否定的。我想我需要一个
multimap<string,map>
来使值部分可以有效地搜索(即红黑树的一部分)
A->B,C,D
B->C,D
C->D
D->E
如果我使用集合映射,这将最好地描述这个结构。地图的每个Key都指向一个集合。每个集合基本上都是一个元素列表。因为我想要高效的搜索和插入,所以我使用 std::map 和 std::set 而不是 std::list 和 std::list。
If I have Key->Elements
A->B,C,D,E
Are B,C,D,E searchable , i.e. are they inserted into a red and black tree.
I think the answer is no. I think I would need a
multimap<string,map>
to make the value part searchable efficiently (i.e. part of a red and black tree)
A->B,C,D
B->C,D
C->D
D->E
If I use a map of sets, this would best describe this structure. Each Key of the map points to a set. Each set is basically a list of Elements. Because I'd like efficient searching and inserting I'm using std::map and std::set instead of std::list and std::list.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
不——地图和多重地图都不会这样做。您需要类似 Boost bimap 的东西。
No -- neither map nor multimap will do that. You'd want something like a Boost bimap for this.
如果您希望值部分成为具有高效查找时间的序列,则可以使用
if 值序列的元素是否唯一
。这将为您提供对数查找时间和对数插入(这可能更好或更差,具体取决于插入类型,请查看
std::set
和std::multiset
文档)。这些集合的行为与std::maps
非常相似,只不过每个元素的值是它的键。If you want the value part to be a sequence with efficient look-up time, you can use
if the elements of the value-sequence are unique, or
if not. This would give you logarithmic lookup time, and logarithmic insertion (this can be better or worse depending on the type of insertion, look at
std::set
andstd::multiset
documentation). The sets behave much like thestd::maps
, except that the value of each element is its key.你想对了。
如果它们按顺序排列,并且您不打算快速添加或删除元素,那么可以 - 在中提供) > 预计会优于
向量
map
查找。You think right.
If they're in order, and you don't plan on adding or removing elements quickly, then yes - a binary search (provided in
<algorithm>
) in avector
can be expected to outperform amap
lookup.