unordered_map与带有int键的向量

时间:2019-11-28 12:51:53

标签: c++ c++11 data-structures

当键是整数时,使用std::unordered_mapstd::vector的性能有何不同?我大约有100-1000个元素,这些元素具有可用于访问向量的连续ID。使用哈希表的原因是更方便按对象本身进行索引。

想象一下三种不同的情况:

  • 密集写作
  • 阅读密集
  • 平衡

请注意,我问的是一个一般性问题,而不是特定于代码的问题。

2 个答案:

答案 0 :(得分:1)

使用最方便的容器完成任务

通常来说。

如果您有类似100-1000的元素,那么容器本身并不重要-使用std::map甚至比std::unordered_map更好,例如,如果您需要调试打印内容-除非您以某种方式依赖哈希。当您遇到类似100k +的元素时,容器的性能开始变得有趣起来。

答案 1 :(得分:0)

通常:

由于缺乏间接性,向量具有更好的缓存一致性。访问索引的速度更快,因为不需要计算哈希函数。迭代具有可预测的分支。

无序映射使用稀疏结构的内存较少(您说索引是连续的,因此此优点不适用于您)。使用无序映射,在任意索引中添加或删除元素的渐近速度更快。

当您只有极少数元素(例如100-1000)时,渐进复杂度不一定重要。在这种情况下,缓存一致性和分支预测趋于占主导地位。

首先选择哪种数据结构更方便。然后测量访问该结构是否对整个程序的性能有重大影响。如果是的话,则测量与其他数据结构的差异,看它是否明显更快(相对于测量方差)。

相关问题