当键是整数时,使用std::unordered_map或std::vector的性能有什么不同。我有大约100到1000个元素,它们具有连续的I,我可以使用它们来访问向量。使用哈希表的原因是更方便地按对象本身进行索引。
想象一下三种不同的情况:
intensive
请注意,我问它是一个一般性的问题,不是一个特定于代码的问题。
发布于 2019-11-28 13:13:40
使用最方便的容器执行任务。
一般来说,.
如果您有类似于100-1000元素的内容,容器本身并不重要--使用std::map甚至比使用std::unordered_map更好--例如,如果您需要调试打印内容--除非您以某种方式依赖哈希。当您接触到类似100k+元素的内容时,容器性能就开始变得有趣起来。
发布于 2019-11-28 13:40:21
一般情况:
由于缺乏间接方向,矢量具有更好的缓存一致性。访问索引更快,因为不需要计算散列函数。迭代有可预测的分支。
无序映射使用稀疏结构的内存更少(您说过索引是连续的,所以这个优势不适用于您)。使用无序映射,在任意索引中添加或删除元素的速度要快得多。
当只有非常少的元素(如100-1000 )时,渐近复杂性并不一定重要。在这种情况下,缓存一致性和分支预测往往占主导地位。
首先选择哪个数据结构更方便。然后评估访问该结构是否会对整个程序的性能产生重大影响。如果是的话,那么与其他数据结构度量差异,看看它是否显着地更快(相对于测量的方差)。
https://stackoverflow.com/questions/59089346
复制相似问题