昨天有人告诉我,有序地图的底层结构是二叉搜索树。这对我来说没有意义,因为如果是这样的话你就不能进行O(1)检索。谁能解释一下?
另外,如果要在不使用stdlib的情况下在C ++中实现哈希表,那么最好的方法是什么?
答案 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)
底层数据结构是实现定义的。它通常被实现为红黑树,它是自平衡二叉搜索树。获取元素的时间复杂度为O(logn)(请参阅this)
我只想阅读std::unordered_map
的实现作为起点。我认为这是学习活动,因此阅读和理解工作STL实施将是一个很好的练习。如果不是练习,请使用std::unordered_map