一个std::set中的“value”是什么意思?

3

C++中,std::set::insert() 只有在没有相同“value”的情况下才插入值。这里的“相同”是指 operator== 吗?还是指对于任何排序,operator<都为 false,或者是指其他内容?


1
严格弱序是一个重要概念,指的是一种比较关系,可以用于排序和搜索算法中。 - Nemo
3个回答

5
如果集合使用默认比较器并使用 < 比较键,则是如此。更一般地,在具有比较器 Compare 的有序容器中,如果满足 !Compare(k1,k2) && !Compare(k2,k1),则将两个键 k1k2 视为等效的
键不需要实现 operator== 或任何其他内容;它们只需要使用容器的比较器进行比较以提供 严格弱排序

2

std::set有一个模板参数叫做`Compare',如下所示:

template < class Key, class Compare = less<Key>,
       class Allocator = allocator<Key> > class set;
Compare 用于确定元素之间的顺序。在这里,默认的less<Key>使用 < 运算符来比较两个键。
如果有帮助的话,您可以将 set 视为仅具有无意义值的 std::map,即 std::set<int> 可以被视为一个 std::map<int,int>,其中值是无意义的。

1

set 只允许通过作为模板的一部分给定的函数对象类型对 T 进行比较。因此,这就是它定义等价性的方式。

对于 set 中的每个值,比较必须对该值和新值之间的两个排序之一进行评估,如果任何值在两种方式下都为 false,则不会存储该值。


2
这意味着浮点数的 NaN 不能成为 set<double> 的成员。 - Keith Thompson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接