最佳答案
最近关于c++中的unordered_map
的讨论让我意识到,对于以前使用map
的大多数情况,我应该使用unordered_map
,因为查找效率更高(平摊O (1) vs. O (log n))。大多数时候我使用映射,我使用int
或std::string
作为键类型;因此,我对哈希函数的定义没有任何问题。我越想越意识到,在简单类型的键的情况下,我找不到使用std::map
而不是std::unordered_map
的任何理由——我看了一下接口,并没有发现任何会影响我的代码的显著差异。
因此问题来了:在简单类型如int
和std::string
的情况下,是否有任何真正的理由使用std::map
而不是std::unordered_map
?
我是从严格的编程角度提出这个问题的——我知道它并不是完全标准的,而且它可能会给移植带来问题。
此外,我希望其中一个正确答案可能是“它对较小的数据集更有效”,因为开销更小(这是真的吗?)——因此,我想将问题限制在键的数量非普通的情况下(>1 024)。
编辑: 哦,我忘记了显而易见的(感谢GMan!)——是的,地图当然是有序的——我知道这一点,我正在寻找其他原因。