我想知道为什么STL的地图是基于rb树的? 我的意思是,基于散列的映射在插入/删除甚至获取值方面似乎更有效。 有什么具体的考虑因素吗?
答案 0 :(得分:12)
STL 最初选择了两者。它有一个哈希表和基于树的地图。
但是,当它被采用到标准中时,许多部分被剥离以简化任务(更容易让委员会讨论包括一个较小的库,并且在实际指定他们的行为方面需要更少的工作)。
因此跳过了哈希表。
但是,这两种数据结构都有其优点。特别是,二叉树允许地图的内容排序(您可以按排序顺序迭代地图的内容,或者您可以要求所有小于特定元素的元素,例如),我只能猜测这个属性被认为比哈希映射的性能优势更重要。
但是,在C ++ 11中,添加了std::unordered_map
,这是长丢失的哈希表。它最初的遗漏只是由于时间压力,而且很可能是委员会政治(保持图书馆小,以尽量减少对它的抵制)