同样的'价值'对于std :: set意味着什么?

时间:2012-10-01 23:52:28

标签: c++ stl insert comparison stdset

在C ++中,std :: set :: insert()仅在没有具有相同“value”的值时才插入值。同样,这是指算子==还是它意味着哪个算子<对于任何一个订购都是假的,或者它是否意味着别的什么?

3 个答案:

答案 0 :(得分:5)

  

是否意味着哪个运营商<对于任何一个订购都是假的吗?

是,如果该集使用默认比较器并使用<比较密钥。更一般地,在具有比较器Compare的有序容器中,如果k1,则将两个键k2!Compare(k1,k2) && !Compare(k2,k1)视为等效

不需要密钥来实现operator==或其他任何内容;他们只需要使用容器的比较器来比较strict weak ordering

答案 1 :(得分:2)

std::set有一个名为“Compare”的模板参数,如下所示:

template < class Key, class Compare = less<Key>,
       class Allocator = allocator<Key> > class set;

Compare用于确定元素之间的排序。在这里,默认less<Key>使用<运算符来比较两个键。

如果它有帮助,您可以将某个集合视为只有std::map的无意义值,即std::set<int>可以被视为std::map<int, int>,其值无意义。< / p>

答案 2 :(得分:1)

set允许在T上执行的唯一比较是通过其作为模板一部分进行比较的仿函数类型。因此,这就是它如何定义等价。

对于set中的每个值,对于该值与新值之间的两个排序之一,比较必须评估为true。如果任何值的两种方式都是假的,那么就不会存储它。