元素在多映射中可搜索吗?需要吗

Are elements searchable in a multimap? Is it needed?

本文关键字:搜索 映射 元素      更新时间:2023-10-16

如果我有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。

否--映射和多映射都不能做到这一点。你可能想要一个类似Boost双地图的东西。

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

multimap<string, set>

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

multimap<string, multiset>

如果没有。这将为您提供对数查找时间和对数插入(根据插入类型,这可能更好或更糟,请参阅std::setstd::multiset文档)。集合的行为与std::maps非常相似,只是每个元素的值都是它的键。

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

你想得对。

但如果它们的键和值是有序的,那么我是否需要一个关联容器。使用矢量不是更好吗?

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