我试图查看libstdc ++对std::multiset
的实现(仅仅因为我很好奇)并找到了这句话https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/include/bits/stl_multiset.h#L118,并且不知道是什么制作它。我理解它的方式,_Rb_tree
class是单个元素树,该行如何将其转换为多集?
我理解它的方式,那条线只是为另一种类型调整分配器。还是我误解了这个非常糟糕的?
这是链接代码
private:
/// This turns a red-black tree into a [multi]set.
typedef typename __gnu_cxx::__alloc_traits<_Alloc>::template
rebind<_Key>::other _Key_alloc_type;
typedef _Rb_tree<key_type, value_type, _Identity<value_type>,
key_compare, _Key_alloc_type> _Rep_type;
/// The actual tree structure.
_Rep_type _M_t;
答案 0 :(得分:1)
_Rb_tree
不会决定是否允许重复值;它甚至不知道它只是一个值还是一个单独的键和值(它在用作pair
时从map
派生出一个键。注释仅表示正在选择使_Rb_tree
作为集合或多集合有用的模板参数。文件前面的评论指出
私有树数据的声明与set和
的方式完全相同 多集;区别完全在于树的功能如何 叫(* _unique与* _equal,与标准相同)。