标签:hash map hashtable cc++ rb_tree
STL的关联容器有set, map, multiset, multimap.用于实现它们的底层容器有划入标准的rb_tree和待加入标准的hashtable.
底层容器rb_tree为上层容器提供了一种有序的服务.关键步骤时间复杂度为O(lgN);
底层容器hashtable为上层容器提供的是无序的服务,但其关键步骤的时间复杂度为O(1).
那么上层容器是怎么映射到底层容器中去的呢?下面以set和map为例,说明它们是如何映射到rb_tree和hashtable的.
对于rb_tree的节点,其实只是保存了Value对象,并没有直接保存Key.
也就是说rb_tree只能直接看到Value,而看不到Key.因此要为rb_tree提供一个间接获取Key的方法.
即KeyOfValue, 它负责从Value获取对应的Key, 用于rb_tree中需要用到key值(比较)的地方.
与rb_tre一样, hashtable也是如此.它通过ExtractKey来提取Value对应的Key.
键值就是实值,即key = value
key_type 与 value_type都是set的 Key.
通常键值与实值不等,即 key != value,为用户提供了一种key到value映射服务.
在hashtable中看到的只是pai<const Key, T>.
value--(KeyOfValue)-->key---(Campare)->插入或删除
value--(ExtractKey)--> key --(HashFcn)--> hashcode--(%n)--> bkt_num-->插入或删除.
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:hash map hashtable cc++ rb_tree
原文地址:http://blog.csdn.net/tangchenchan/article/details/46766559