现在我正在寻找python源代码,我发现python和C#都使用hash来实现Dictionary
。
哈希的时间复杂度为O(1)
,RBtree
为O(lgn)
,因此任何人都可以告诉我C++ STL
使用RBtree
实施{的原因{1}}?
答案 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
。