同样的'value'对于 std::set 意味着什么?
What does same 'value' mean for a std::set?
在C++中,std::set::insert() 只有在还没有具有相同"值"的值时才插入一个值。 同样,这是否意味着运算符==,或者它是否意味着哪个运算符<对于排序是错误的,还是意味着其他东西?>
这是否意味着哪个运算符<对于任一排序都是错误的?>
是的,如果集合使用默认比较器并使用<
比较键。更一般地说,在具有比较器Compare
的有序容器中,如果!Compare(k1,k2) && !Compare(k2,k1)
,两个键k1
和k2
被视为等价。
实现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,则不会存储它。
相关文章:
- 为什么我无法更改"set<set>"循环中的值<int>
- 对于set上的循环-获取next元素迭代器
- 这行代码在C++类中意味着什么
- 在声明中合并两个常量"std::set"(不是在运行时)
- 有没有办法对std::unordered_set、std::unrdered_map、std::set、std::map
- 将 std::set 与基于键的比较器一起使用
- 如何使用set实现无序数据结构?
- 这对"With a stackless coroutine, only the top-level routine may be suspended."意味着什么
- 寻找地理和伤害意味着超载
- 使用运算符调用 void 函数时出错<set>
- 修改"std::set"中用户定义类型的值
- @CPPFLAGS@在 Makefile.in 中意味着什么?
- 生成提升::hana::set 的常量表达式问题
- 如何在构造函数参数中初始化"std::set"?
- 如何使用 lower_bound/upper_bound 从 std::set 获取索引号?
- 如何在 C++ 中转发声明 std::set?
- 在C++标准中做格式好意味着代码可以编译
- 重构使用动态强制转换的 std::set 的比较运算符
- 当索引为 1 时,_BitScanReverse返回 0,这意味着根据 MS "no set bits were found"
- 同样的'value'对于 std::set 意味着什么?