c++ - 在 std::map 和 std::unordered_map 之间进行选择

标签 c++ c++11 hash map unordered-map

既然 stdunordered_map 中有一个真正的 HashMap ,为什么(或何时)我仍想使用旧的 map在实际存在的系统上通过 unordered_map?是否有任何我无法立即看到的明显情况?

最佳答案

作为 already mentioned , map 允许以排序的方式遍历元素,但 unordered_map 不允许。这在许多情况下都非常重要,例如显示集合(例如地址簿)。这也体现在其他间接方式中,例如:(1) 从 find() 返回的迭代器开始迭代,或 (2) 存在像 lower_bound() 这样的成员函数。

另外,我认为最坏情况 搜索的复杂性有所不同。

  • 对于map,为O(lg N)

  • 对于unordered_map,是O(N)[这个可能发生在hash函数不好导致太多hash冲突的时候。] p>

这同样适用于最坏情况 删除复杂性。

关于c++ - 在 std::map 和 std::unordered_map 之间进行选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3902644/

相关文章:

ios - .hash 给出 EXC_BREAKPOINT (code=EXC_ARM_BREAKBOINT

hash - 简单的(编码)安全哈希函数

c++ - 琐碎的 C++ 代码……为什么要编译?

c++ - OpenGL 阴影平移

c++ - 关于 unique_ptr 的表现

c++ - N2965 - std::bases 和 std::direct_bases 的状态如何?

c++ - 在 OpenGL 中将深度渲染到纹理时出现奇怪的结果

c# - C++ 模板和 C# 泛型

c++ - 错误 : 'A' is an inaccessible base of 'B'

scala - 如何使用 Scala 生成哈希码