【发布时间】:2011-01-12 21:51:22
【问题描述】:
最近一次关于 C++ 中 unordered_map 的讨论让我意识到,由于查找的效率(amortized O(1) em> 与 O(log n) )。大多数时候我使用地图,我使用int 或std::string 作为键类型;因此,我对哈希函数的定义没有任何问题。我想得越多,我就越意识到在简单类型的键的情况下,我找不到使用std::map 而不是std::unordered_map 的任何理由——我看了一下接口,并且没有发现任何会影响我的代码的重大差异。
因此问题是:对于像int 和std::string 这样的简单类型,是否有任何真正的理由使用std::map 而不是std::unordered_map?
我是从严格的编程角度提问的——我知道它没有被完全认为是标准的,而且它可能会给移植带来问题。
另外,我希望正确答案之一可能是“它对较小的数据集更有效”,因为开销较小(是这样吗?)——因此我想将问题限制在密钥数量非平凡(> 1 024)的情况。
编辑: 呃,我忘记了明显的(感谢 GMan!)——是的,地图当然是有序的——我知道,并且正在寻找其他原因。 em>
【问题讨论】:
-
我喜欢在采访中问这个问题:“什么时候快速排序比冒泡排序更好?”该问题的答案提供了对复杂性理论实际应用的洞察,而不仅仅是简单的黑白陈述,例如 O(1) 优于 O(n) 或 O(k) 等效于 O(logn) 等。 ..
-
@Beh,我想你的意思是“什么时候冒泡排序比快速排序更好”:P
-
智能指针会是一个微不足道的键吗?
-
这里是地图是优势之一的情况之一:stackoverflow.com/questions/51964419/…
-
@Matthieu N. 在你的位置上,使用这种几乎永远不会有用并且不必要地让很多候选人感到尴尬的问题,我宁愿感到尴尬:/
标签: c++ performance dictionary unordered-map