试图理解libstdc ++对std :: multiset

时间:2017-09-21 04:02:19

标签: c++ c++11 gcc libstdc++ multiset

我试图查看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;

1 个答案:

答案 0 :(得分:1)

_Rb_tree不会决定是否允许重复值;它甚至不知道它只是一个值还是一个单独的键和值(它在用作pair时从map派生出一个键。注释仅表示正在选择使_Rb_tree作为集合或多集合有用的模板参数。文件前面的评论指出

  

私有树数据的声明与set和
的方式完全相同   多集;区别完全在于树的功能如何   叫(* _unique与* _equal,与标准相同)。