SGI STL中set/map底层都是通过RB-tree实现的。

首先看看RB-tree结点的定义

 1 typedef bool __rb_tree_color_type;
 2 const __rb_tree_color_type __rb_tree_red = false;
 3 const __rb_tree_color_type __rb_tree_black = true;
 4 
 5 // 结点的基类
 6 struct __rb_tree_node_base
 7 {
 8     typedef __rb_tree_color_type color_type;
 9     typedef __rb_tree_node_base* base_ptr;
10 
11     // 关键的4个域
12     color_type color; 
13     base_ptr parent;
14     base_ptr left;
15     base_ptr right;
16     
17     // 返回极值
18     static base_ptr minimum(base_ptr x)
19    {
20         while (x->left != 0) x = x->left;
21         return x;
22     }
23 
24     static base_ptr maximum(base_ptr x)
25     {
26         while (x->right != 0) x = x->right;
27         return x;
28      }
29 }
30 
31 // 多了一个value域
32 template <class Value>
33 struct __rb_tree_node : public __rb_tree_node_base
34 {
35     typedef __rb_tree_node<Value>* link_type;
36     Value value_field;
37 };
View Code

相关文章: