在集合中查找比unordered_map

时间:2019-02-13 10:33:24

标签: c++ stl set unordered-map

我对查询速度有疑问。我想知道哪个STL容器可以在C ++中产生最快的查找时间。因为unordered_map是由哈希映射实现的,所以我想到了它,但是我担心它的性能会受到影响,因为它包含键值对,而set仅包含键。我猜答案将取决于1)密钥的数据类型; 2)set的STL实现。

换句话说,哪个容器搜索密钥的速度更快,它是设置的,unordered_map还是其他?

编辑:

通过对容器的实现或机制进行更多解释,将对这个答案表示赞赏。例如,unordered_map很快,因为它是通过hashmap实现的。这将比说“取决于需求”更有用。谢谢!

2 个答案:

答案 0 :(得分:2)

这在很大程度上取决于数据的分布,数据集的大小,编译器,工具链...

您唯一知道的方法是针对用例进行测量

在为任务选择the appropriate container之后执行此操作,然后仅在发现需要这样做并且可以通过使用案例获得更好的性能时才切换到其他选项。

根据您的问题,我想选择的范围是setunsorted_set。另一方面,如果您实际上还不知道数据是否同时具有键值,那么您可能还没有准备好开始分析解决方案。

答案 1 :(得分:0)

从另一个角度考虑这个观点,

由于您对性能感兴趣,因此,您可能希望以最佳利用缓存线的方式设计数据结构

如果元素的数量不太高,则向量将优于所有其他容器。之所以如此,是因为向量将元素存储在连续的内存位置中,并且您的缓存喜欢连续的内存分配

您还提到了键值对妨碍查找速度的问题。从高速缓存行角度解决此问题的一种方法是将密钥存储在连续的数据结构中,仅使用密钥进行查找。仅当您点击时,您可能希望从键值对中读取相应的值

Check out this talk by Mike acton for more on this