C++、STL标准模板库和泛型编程 ——关联式容器 (侯捷)

C++、STL标准模板库和泛型编程——关联式容器 (侯捷)( 持续更新!!!)
- 关联式容器
-
- rb_tree 容器
C++、STL标准模板库和泛型编程——序列式容器 (侯捷)
关联式容器
关联式容器,通过key来找值,查找速度非常快,可以看成是小型数据库。
关联容器:set、multiset、map、multimap,实现是使用 红黑树(高度平衡二叉树)
set的key既是key也是value。

C++11中有Unordered容器,但他也属于关联容器,实现使用hash table做的

rb_tree 容器
Red-Black tree(红黑树)是平衡二叉搜索树(balanced binary search tree)中常被使用的一种。平衡二叉搜索树的特征:排列规则有利search 和insert,并保持适度平衡——无任何节点太深。

rb_tree 提供“遍历”操作及iterators.
- 按正常规则(
++ite)遍历。便能获得排序状态(sorted)。
我们不应使用rb_tree的iterators改变元素值(因为元素有其严谨排序规则)。编程层面(programming leve)并未阻止此事。
- 如此设计是正确的,因为
rb_tree即将为set和map服务(作为其底层支持); - 而
map允许元素的data被改变,只有元素的key才是不可以改变的。 rb_tree提供两个insertion操作:insert_unique()和insert_equal()。前者表示节点的key一定是在整个tree中独一无二,否则安插失败(对红黑树没有任何影响);后者表示节点的key可以重复。
使用红黑树,有5个模板参数:

红黑树和双向链表都有一个不用的节点,双向链表是end后面的节点,红黑树是头节点。
第三个模板参数是指定如何取出key:



