【问题标题】:What is difference between map and unordered map? [duplicate]地图和无序地图有什么区别? [复制]
【发布时间】:2017-10-25 14:26:15
【问题描述】:

根据:This Tutorial

我不明白std::mapstd::unorderedmap 之间的区别。何时以及为什么我们应该使用 MapUnorderedmap

【问题讨论】:

  • 此答案在表格中显示差异:stackoverflow.com/a/13799886/5601284
  • std::map有序(按键排序)而std::unordered_map 不是?
  • 在您发布的同一个链接中是另一篇帖子http://thispointer.com/map-vs-unordered_map-when-to-choose-one-over-another/
  • 不同之处在于内部表示以及元素插入和查找的速度。 Map 是实现为二叉树的排序键值对的关联容器。无序映射是通过一个哈希函数和一个带有链表的桶数组实现的。

标签: c++ dictionary


【解决方案1】:

正如我在您提供的教程中所读到的,std::unorderedmap 中的搜索速度是 O(1)。在std::map 中是O(log2(n)),其中n 是地图的大小。
所以如果你必须经常打电话给std::find,你可以考虑这个选项。虽然选择哈希函数并非易事。

【讨论】:

  • "std::unorderedmap 中的搜索速度为 O(1)" 这不太正确。
  • @Slava 好吧,我没有使用std::unorderedmap,但教程指出计算密钥的哈希然后进行比较。这更多的是对数复杂度然后是O(1) 吗?
  • 不是这样,您比较 std::map 中的 O(log2(n)) 与 std::unordered_map 中的 O(1) 但您无法比较它们,因为这不是苹果与苹果之间的比较。 std::map 保证 O(log2(n)) 而std::unordered_map 通常有 O(1),但可以降级到 O(n)。您的陈述说搜索速度始终为 O(1),这并不完全正确并且可能会产生误导。
猜你喜欢
  • 2011-02-22
  • 2016-02-17
  • 2020-09-28
  • 1970-01-01
  • 2013-11-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-23
相关资源
最近更新 更多