前言
set/multiset以rb_tree为底层结构,因此有元素自动排序特性。排序的依据是key,而set/multiset元素的value和key合二为一:value就是key。
我们无法使用set/multiset的iterators改变元素值(因为key有其严谨排列规则)。
set/multiset的iterator是其底部RB tree的const-iterator,就是为了禁止用户对元素赋值。
set元素的key必须独一无二,因此其insert使用的是rb_tree的_M_insert_unique(),而multiset元素的key可以重复,因此其insert使用的是rb_tree的_M_insert_equal()。
set
针对set源码比较简单,故从下面几个问题出发。
第一个问题:key是value,value也是key。
具体代码再第二个问题中会有,这里给出我们通常写代码后内部逻辑,我们看到里面有个红黑树,而红黑树的定义key与value是一样的,所以回答了这个问题。(源码中typedef都是来自key)。
template<typename _Key, typenam