关联容器的查找和插入都很快,类似于数据库,通过key来查找value;底层通过红黑树和hast table来支持。
一、红黑树
1、按照key来排序
二、set/multiset
1、key即value,所以不允许修改值
2、将迭代器设置为const,来阻止修改其值;
3、set的操作,都交给了红黑树来完成,更像是容器的适配器(如同stack,queue,操作都交给deque);
三、map/multimap
1、插入即排序,不可以改变key,可以改变value
2、将key和value包成pair,并将key设置为const,从而阻止修改;
四、hashtable
1、关联容器的另一个分支。每个bucket下有一个链表,当元素个数大于bucket数时(可能会使链表过长,不利于查询),重新分配bucket:
一般二倍附近原bucket数(最接近的素数)。
2、有的hashtable需要自己设计hash function,参考如下的特化版本
五、 unordered容器
底层为hash table