为什么C ++ STL使用RBtree来实现“std :: map”?

时间:2012-03-17 00:47:46

标签: c++ stl std

现在我正在寻找python源代码,我发现python和C#都使用hash来实现Dictionary

哈希的时间复杂度为O(1)RBtreeO(lgn),因此任何人都可以告诉我C++ STL使用RBtree实施{的原因{1}}?

2 个答案:

答案 0 :(得分:8)

因为它有一个单独的哈希表容器:std::unordered_map<>。另请注意,除了SortedDictionary<>之外,.NET还有Dictionary<>

答案 1 :(得分:1)

答案可在“标准C ++库,教程和参考”中找到,可在线获取:http://cs-people.bu.edu/jingbinw/program/The%20C++STL-T&R.pdf

简短的引言解释:

  

一般来说,整个标准(语言和图书馆)是很多讨论的结果   受到全世界数百人的影响。例如,日本人提出了   对国际化的重要支持。当然,犯了错误,思想发生了变化,   人们有不同的意见。然后,在1994年,当人们认为标准接近时   完成后,STL被合并,从根本上改变了整个图书馆。但是,要   完成后,无论如何,最终停止了对主要扩展的思考   有用的扩展名。因此,哈希表不是标准的一部分,尽管它们   应作为STL的一部分作为通用数据结构。

显然从那时起c ++ 11问世了,因为名字map已经被采用,hash_map是一个已经通过公共扩展库广泛使用的名称(eg__gnu_cxx :: hash_map) ),为哈希映射选择了名称unordered_map