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 };