STL中的map、set(学完红黑树后的一个小总结)
树介绍 树是一种很常用的数据结构,在很多地方都能看到树的应用,因为树往往可以用来优化数据查找的效率。 在一些优秀的系统中就会经常用到各种树结构,比如红黑树、AVL树、B树等。 红黑树的应用: 原理: 根节点是黑色的 只有红黑节点 叶节点都是黑色的nil 红色节点子节点必须是黑色的 对每个节点,从该节点到叶子节点路径上的黑节点数目一致,黑平衡性质 以上的五个性质保证了红黑树是平衡的,所以红黑树的查找效率能够稳定在lgn STL模板库中map和set的底层实现: 红黑树中节点和迭代器的实现 所有这些优秀的底层设计都会把结构和数据分离 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; // 右子节点 } template <class Value> struct __rb_tree_node : public __rb_tree_node_base { typedef __rb_tree_node<Value>* link_type;