【侯捷-SL体系结构内核分析-set和multiset探索】
STL中assosiated container 比如 set 和 multiset 底层都是由红黑树作为支撑实现,所以在了解他们之前,有必要先来了解一下红黑树。
红黑树
template<class _Traits>
class _Tree
: public _Tree_comp_alloc<_Traits>
{
// ordered red-black tree for map/multimap/set/multiset
...
}
注:STL中红黑树的定义在file://…/xtree文件中
可以看到,要定义一个红黑树时,需要一个模板参数_Traits,那么_Traits是什么呢?
为了知道_Traits是什么,可以参考set中对_Traits的定义。set的定义如下:
template<class _Kty,
class _Pr = less<_Kty>,
class _Alloc = allocator<_Kty>>
class set
: public _Tree<_Tset_traits<_Kty, _Pr, _Alloc, false>>
{
// ordered red-black tree of key values, unique keys
...
}
可以看到,set容器继承了_Tree,传给_Tree的模板参数是_Tset_traits<_Kty, _Pr, _Alloc, false>,那_Tset_traits又是什么呢?
template<class _Kty, // key/value type
class _Pr, // comparator predicate type
class _Alloc, // actual allocator type (should be value allocator)
bool _Mfl> // true