STL源码剖析-----关联式容器

一、set

        所有元素都会根据元素的键值自动排序,set元素不像map那样可以同时拥有key和value,set元素的键值就是实值,set不允许有两个相同元素的键值。


二、map

       所有元素都会根据元素的键值自动排序,map不允许有两个元素有相同的键值。以红黑树作为底层机制,每一个节点上的内容是一个pair,pair的第一个元素是键值,第二个元素为实值。


三、multiset

       特性与set完全相同,唯一区别键值允许重复。那是因为它的插入操作是底层机制RB-TREE的insert-equal()而非insert_unique().


四、hash_table

线性探测:循环一一寻找,如果到达尾端,就绕道头部进行下去。

二次探测:H,H+1,h+4,H+9…….

开链探测:为表格中的每一个元素维护一个list,然后在list身上执行元素的插入、搜寻、删除等操作,负载系数将大于1。SGI STL中的hash_table便是采用这种做法。SGI STL中采用质数来设计表格的大小。传入参数n时,找到大于或等于n最小的那个质数


五、hash_set

       以hash_table为底层实现机制,由于RB-tree有自动排序功能而hash_table没有,所以set元素有自动排序,而hash_set是没有的。

 

六、hash_map

      以hash_table为底层实现机制,由于RB-tree有自动排序功能而hash_table没有,所以map元素有自动排序,而hash_map是没有的。

你可能感兴趣的:(STL源码剖析-----关联式容器)