C++STL 体系结构与内核分析(侯捷)——课程笔记(八)

下面就要开始介绍关联容器了,set,multiset,map,multimap底层都是由红黑树实现的,而unordered版本的这四种容器都是由hashtable实现的。本部分包括关联容器这个大主题的第一部分内容:红黑树。注意:这里的介绍不包括红黑树的着色、旋转等原理,介绍的主题是结合G2.9的源代码,看红黑树的成员、接口等实现方式。

一、红黑树的G2.9实现

红黑树是一种自平衡二叉搜索树,之前学习过AVL树,但为什么红黑树在实际工程中应用这么广泛后面还是要了解一下。红黑树有几个需要遵守的规则:比如节点有红黑两种颜色,根节点必须是黑节点,红节点不能相邻,从任意节点到叶节点的所有路径上的黑节点数目是固定的。当插入一个新节点时,上述规则会被违反,所以需要对树做一些调整,调整大概分两种:重新涂色和旋转,旋转和AVL树一样分四种情况,所以我猜两种树的旋转规则是一样的,调整细节有空再看把,估计也不需要知道那么细,下面看G2.9源码:

template <class Key,
          class Value,
          class KeyOfValue,
          class Compare,
          class Alloc = alloc>
class rb_tree{
protected:
    typedef __rb_tree_node<Value> rb_tree_node;
    ......
public:
    typedef rb_tree_node* link_type;
    ......
protected:
    size_type node_count;    //rb_tree的大小
    link_ty
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值