【STL源码剖析】第五章 关联式容器 之 hash_set、hash_map、hash_multiset和hash_multimap

hash_set

  1. hash_set以hashtable为底层实现机制。由于hash_set所供应的操作接口,hashtable都提供了,所以几乎所有的hash_set操作行为,都只是转调用hashtable的操作而已。

  2. 运用set目的是能够快速搜寻元素,这一点,不论底层是RB-tree或是hashtable都可以达成任务。但是,RB-tree有自动排序功能而hashtable没有,反应出来的结果就是,set的元素有自动排序功能而hash_set没有。

  3. set的元素不像map那样可以同时拥有实值(value)和键值(key),set元素的键值就是实值,实值就是键值。这一点在hash_set中也是一样的。hash_set的使用方式,与set完全相同。

hash_map

  1. hash_map以hashtable为底层机制,由于hash_map所提供的操作接口,hashtable都提供了,所以几乎所有的hash_map操作行为,都只是调用hashtable的操作行为而已。

  2. 运用map为的是根据键值快速搜寻元素,这一点底层不论是RB-tree或者是hashtable,都可以达到任务。但是,RB-tree有自动排序功能而hashtable没有,反应出来的结果就是,map的元素有自动排序的功能而has_map没有。

  3. map的特性是,每一个元素同时拥有一个实值和一个键值,这一点在hash_map中也是一样的。hash_map的使用方式和map完全相同。

hash_multiset

hash_multiset的特性与multiset完全相同,唯一的差别在于它的底层机制是hashtable。也因此,hash_multiset的元素并不会被自动排序。

hash_multiset和hash_set实现上唯一的差别在于,前者的元素插入操作采用底层机制hashtable的insert_equal(),后者则采用insert_unique()。

hash_multimap

hash_multimap的特性与multimap完全相同、唯一的差别在于它的底层机制是hashtable。也因此,hash_multimap的元素并不会被自动排序。

hash_multimap和hash_map实现上的唯一差别在于,前者的元素插入操作采用底层机制hashtable的insert_equal(),后者则采用insert_unique()。

猜你喜欢

转载自blog.csdn.net/u012940886/article/details/80724725
今日推荐