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
: