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

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

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

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

  • 关联式容器
    • rb_tree 容器

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

关联式容器

关联式容器,通过key来找值,查找速度非常快,可以看成是小型数据库。

关联容器:setmultisetmapmultimap,实现是使用 红黑树(高度平衡二叉树)

  • setkey既是key也是value

在这里插入图片描述
C++11中有Unordered容器,但他也属于关联容器,实现使用hash table做的

在这里插入图片描述

rb_tree 容器

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

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

rb_tree 提供“遍历”操作及iterators.

  • 按正常规则(++ite)遍历。便能获得排序状态sorted)。

我们不应使用rb_treeiterators改变元素值(因为元素有其严谨排序规则)。编程层面(programming leve并未阻止此事

  • 如此设计是正确的,因为rb_tree即将为setmap服务(作为其底层支持);
  • map允许元素的data被改变,只有元素的key才是不可以改变的。
  • rb_tree提供两个insertion操作:insert_unique()insert_equal()。前者表示节点的key一定是在整个tree中独一无二,否则安插失败(对红黑树没有任何影响);后者表示节点的key可以重复。

使用红黑树,有5个模板参数:

在这里插入图片描述
红黑树和双向链表都有一个不用的节点,双向链表是end后面的节点,红黑树是头节点。

第三个模板参数是指定如何取出key:

在这里插入图片描述