std :: map的底层结构是什么?

时间:2017-02-16 12:19:56

标签: c++ algorithm optimization hashmap

昨天有人告诉我,有序地图的底层结构是二叉搜索树。这对我来说没有意义,因为如果是这样的话你就不能进行O(1)检索。谁能解释一下?

另外,如果要在不使用stdlib的情况下在C ++中实现哈希表,那么最好的方法是什么?

3 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

  1. 底层数据结构是实现定义的。它通常被实现为红黑树,它是自平衡二叉搜索树。获取元素的时间复杂度为O(logn)(请参阅this

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

相关问题