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

What does same 'value' mean for a std::set?

本文关键字:set 意味着 什么 value 对于 std      更新时间:2023-10-16

在C++中,std::set::insert() 只有在还没有具有相同"值"的值时才插入一个值。 同样,这是否意味着运算符==,或者它是否意味着哪个运算符<对于排序是错误的,还是意味着其他东西?>

这是否意味着哪个运算符<对于任一排序都是错误的?>

是的,如果集合使用默认比较器并使用<比较键。更一般地说,在具有比较器Compare的有序容器中,如果!Compare(k1,k2) && !Compare(k2,k1),两个键k1k2被视为等价

实现operator==或其他任何东西都不需要密钥;它们只需要使用容器的比较器进行比较,以给出严格的弱排序

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>

set

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

对于set中的每个值,比较值和新值之间的两个排序之一的计算结果必须为 true。如果任何值的双向都为 false,则不会存储它。