1.1 RB-tree

1.1.1 RB-tree主体部分

template <class Key, class Value, class KeyOfValue, class Compare,class Alloc = alloc>
class rb_tree {protected:typedef void* void_pointer;typedef __rb_tree_node_base* base_ptr;typedef __rb_tree_node<Value> rb_tree_node;typedef simple_alloc<rb_tree_node, Alloc> rb_tree_node_allocator;typedef __rb_tree_color_type color_type;
public:typedef Key key_type;typedef Value value_type;typedef value_type* pointer;typedef const value_type* const_pointer;typedef value_type& reference;typedef const value_type& const_reference;typedef rb_tree_node* link_type;typedef size_t size_type;typedef ptrdiff_t difference_type;
protected:link_type get_node() { return rb_tree_node_allocator::allocate(); }void put_node(link_type p) { rb_tree_node_allocator::deallocate(p); }link_type create_node(const value_type& x) {link_type tmp = get_node();__STL_TRY {construct(&tmp->value_field, x);}__STL_UNWIND(put_node(tmp));return tmp;}link_type clone_node(link_type x) {link_type tmp = create_node(x->value_field);tmp->color = x->color;tmp->left = 0;tmp->right = 0;return tmp;}void destroy_node(link_type p) {destroy(&p->value_field);put_node(p);}protected:size_type node_count; // rb_tree的大小(节点数量)link_type header;  //指向节点指针Compare key_compare;//提供的比较器(函数对象)
....
};

注意这里的Value是由key|data两者合成而来的。

1.1.2 RB-tree节点类型

struct __rb_tree_node_base
{typedef __rb_tree_color_type color_type;typedef __rb_tree_node_base* base_ptr;color_type color; base_ptr parent;//父节点base_ptr left;//左边节点base_ptr right;//右边节点static base_ptr minimum(base_ptr x){while (x->left != 0) x = x->left;return x;}static base_ptr maximum(base_ptr x){while (x->right != 0) x = x->right;return x;}
};
template <class Value>
struct __rb_tree_node : public __rb_tree_node_base
{typedef __rb_tree_node<Value>* link_type;Value value_field;
};

STL学习(自学手册+源码分析)之RB -tree相关推荐

  1. sheng的学习笔记-Vector源码分析

    概述 Vector底层也是数组,跟ArrayList很像(先看下ArrayList,再看Vector会很轻松),ArrayList可参考下文,并且由于效率低,已经被淘汰了,大概瞅瞅得了 sheng的学 ...

  2. Java设计模式学习以及底层源码分析

    源码在分支master 工厂模式 把具体创建产品的细节封装起来,你要什么产品,我给你什么产品即可. 简单工厂模式 工厂方法模式 缓存层:抽象类 抽象工厂模式 缓存层是:接口 原型模式 问题: 原型模式 ...

  3. Licode入门学习:MediaStream源码分析(二)

    Licode服务与启动过程分析 MediaStream源码分析(一) MediaStream源码分析(二) MediaStream源码分析(三) WebRtcConnection源码分析(一) Web ...

  4. Licode入门学习:MediaStream源码分析(三)

    Licode服务与启动过程分析 MediaStream源码分析(一) MediaStream源码分析(二) MediaStream源码分析(三) WebRtcConnection源码分析(一) Web ...

  5. Licode入门学习:WebRtcConnection源码分析(一)

    Licode服务与启动过程分析 WebRtcConnection源码分析(一) WebRtcConnection源码分析(二) WebRtcConnection源码分析(三) MediaStream源 ...

  6. Licode入门学习:MediaStream源码分析(一)

    Licode服务与启动过程分析 MediaStream源码分析(一) MediaStream源码分析(二) MediaStream源码分析(三) WebRtcConnection源码分析(一) Web ...

  7. Licode入门学习:WebRtcConnection源码分析(二)

    Licode服务与启动过程分析 WebRtcConnection源码分析(一) WebRtcConnection源码分析(二) WebRtcConnection源码分析(三) MediaStream源 ...

  8. Licode入门学习:WebRtcConnection源码分析(三)

    Licode服务与启动过程分析 WebRtcConnection源码分析(一) WebRtcConnection源码分析(二) WebRtcConnection源码分析(三) MediaStream源 ...

  9. Netty学习十七:源码分析之HashWheelTimer

    一.常见定时任务实现 定时器的使用场景包括:成月统计报表.财务对账.会员积分结算.邮件推送等,它一般有三种表现形式:按固定周期定时执行.延迟一定时间后执行.指定某个时刻执行. 定时器的本质是设计一种数 ...

最新文章

  1. C#苹果应用开发——第一讲初始Xamarin
  2. PHP学习笔记6:面向对象的PHP
  3. WPF自定义控件(1)——仪表盘设计[1]
  4. fastjson json串转list
  5. [InnoDB系列] -- SHOW INNODB STATUS 探秘
  6. BugkuCTF–flag在index里
  7. jQuery学习笔记(四)——表单选择
  8. FlinkX 如何读取和写入 Clickhouse?
  9. pythonelectron桌面开发案例_electron vue桌面应用入门实例
  10. Oracle数据库事务回滚和提交,数据库 事务提交和回滚
  11. 揭开HTTPS的神秘面纱
  12. sqlserver oracle对比,sqlserver和oracle常用函数对比
  13. 算法第四版 课后习题答案
  14. 1047: 对数表 ZZULIOJ
  15. excel2007不显示文件名
  16. P1162 填涂颜色(BFS)
  17. 学英语《每日一歌》之Traveling Light
  18. 使360浏览器打开网页默认为极速模式
  19. MeeGo开发者(二):MeeGo架构
  20. android逆向分析so,Android逆向——so反编译分析由浅入深(回帖奖励)

热门文章

  1. python 文件读写with open模式r,r+ w,w+ a,a+区别详解
  2. 7-1 重要的话说三遍
  3. 数星星 ← 树状数组
  4. 群智能算法改进第四期-改进灰狼优化算法
  5. Android实现仿真iPhone界面
  6. 4G/5G多卡聚合设备在公安无线传输中的解决方案
  7. HTML5 标准规范
  8. 让 AirDrop 支持有线传输,甚至让不支持 AirDrop 的 Mac 也能使用该功能 黑苹果也可以的哦
  9. Linux驱动开发学习笔记【12】:Linux自带LED灯驱动
  10. JAVA中医药院校科研会议系统计算机毕业设计Mybatis+系统+数据库+调试部署