【问题标题】:What is the underlying structure of an std::map? [closed]std::map 的底层结构是什么? [关闭]
【发布时间】:2017-02-16 12:19:55
【问题描述】:

昨天有人告诉我,有序映射的底层结构是二叉搜索树。这对我来说没有意义,因为如果是这种情况,您将无法进行 O(1) 检索。谁能解释一下?

另外,如果要在 C++ 中实现哈希表而不使用标准库,那么最好的方法是什么?

【问题讨论】:

  • 你从哪里得知检索是 O(1)?首先阅读docs,其次它们通常被实现为red-black trees,第三你的其他问题太宽泛了
  • 也尽量限制自己一个问题。

标签: c++ algorithm optimization hashmap


【解决方案1】:

std::map 查找时间不是 O(1),而是 O(log(n))。

std::unordered_map 的查找时间为 O(1) 摊销。

std::unordered_map 和 std::unordered_set 是哈希表。

【讨论】:

    【解决方案2】:
    1. 底层数据结构是实现定义的。它最常被实现为红黑树,它是一种自平衡二叉搜索树。获取元素的时间复杂度为 O(logn)(见this

    2. 我只想阅读std::unordered_map 的实现作为起点。我认为这是学习活动,因此阅读和理解工作中的 STL 实现将是一个很好的练习。如果不是练习,请使用std::unordered_map

    【讨论】:

      【解决方案3】:

      std::map 使用红黑树,因为它在节点插入/删除和搜索的复杂性之间进行了合理的权衡。

      【讨论】:

      • 当前的实现确实如此,但标准并不要求它。 (目前没有人知道另一种可以满足要求的数据结构 - 但明天可能会发现。)
      猜你喜欢
      • 2014-06-26
      • 2010-10-29
      • 1970-01-01
      • 1970-01-01
      • 2014-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-15
      相关资源
      最近更新 更多