gpt4 book ai didi

c++ - "<"是否满足严格的弱排序意味着不需要 "=="定义?

转载 作者:太空狗 更新时间:2023-10-29 19:45:18 26 4
gpt4 key购买 nike

我不太了解严格弱排序背后的数学原理。但我读过一些东西:

An operator that satisfies strict weak ordering can express all other logical operators

<(a, b)  : (a < b)
<=(a, b): !(b < a)
==(a, b): !(a < b) && !(b < a)
!=(a, b) : (a < b) || (b < a)
>(a, b) : (b < a)
>=(a, b): !(a < b)

那么是不是就不需要“==”的定义了,因为“<”满足严格的弱排序,可以表达所有的逻辑运算符? (这显然看起来不正确,因为我已经看到类同时定义了 <==。)

一个易于理解的解释也将不胜感激 :D。不必过于“数学”或“技术正确”。


谁能给我 1 或 2 个(如果很容易找到的话)标准库基于 < 定义其他运算符的示例?引用源代码就足够了。

最佳答案

要事第一。定义 operator <并不意味着您得到了 operator == 的定义从编译器免费。它仍然需要明确定义。

上表假设某些类型和排序关系适用,但并非适用于所有类型和顺序关系。它假定两个元素之间的等价意味着相等。这不需要成立。

我们当然可以使用<检查两个元素之间的等价性。根据严格的周排序,它们是等价的(这就是 !(a < b) && !(b < a) 的意思)。这并不一定意味着这些元素是相等的。

一个很好的例子是字符串之间不区分大小写的比较。在那种情况下,我们肯定会有 !("ab" < "AB") && !("AB" < "ab") , 这两个字符串是等价的,但它们的值不相等。

说了这么多。如果您定义的顺序关系暗示了您的类型的所有其他顺序关系,there are tricks从中生成所有其他操作。正如表格所示。

关于c++ - "<"是否满足严格的弱排序意味着不需要 "=="定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51184545/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com