(四)容器探索:关联容器

关联容器的查找和插入都很快,类似于数据库,通过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

posted @ 2018-12-29 11:02  牧马人夏峥  阅读(140)  评论(0编辑  收藏  举报