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

Why does the C++ STL use RBtree to implement "std::map"?

本文关键字:std map 实现 C++STL 使用 RBtree 为什么      更新时间:2023-10-16

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

散列的时间复杂度是O(1)RBtreeO(lgn),所以有人能告诉我C++ STL使用RBtree来实现std::map的原因吗?

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

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

简短报价解释:

总的来说,整个标准(语言和库)是经过大量讨论和来自世界各地数百人的影响。例如,日本人想出了国际化的重要支撑。当然,犯了错误,改变了主意,人们有不同的意见。然后,在1994年,当人们认为该标准接近STL的加入从根本上改变了整个库。但是完成后,对主要扩展的思考最终停止了,不管如何因此,哈希表不是标准的一部分,尽管它们应该是STL的一部分,作为公共数据结构。

显然,由于c++11已经问世,并且名称map已经被采用,并且hash_map是一个已经通过公共扩展库(例如__gnu_cxx::hash_map)广泛使用的名称,因此为哈希映射选择了名称unordered_map