我对严格弱排序背后的数学知之甚少。但我读过一些东西:
那么这是否意味着不需要“==”定义,因为“< 和 ==
。)
一个易于理解的解释也将非常受欢迎:D。没有必要太“数学”或“技术上正确”。
有人能给我 1 或 2 个(如果它们很容易找到)标准库基于 <
定义其他运算符的示例吗?对源代码的引用就足够了。
最佳答案
第一件事是第一件事。定义 operator <
并不意味着您可以从编译器免费获得 operator ==
的定义。它仍然需要明确定义。
上表假设对许多类型和排序关系都适用,但并非对所有类型都适用。它假设两个元素之间的等价意味着相等。那不必持有。
我们当然可以使用 <
来检查两个元素之间的等价性。根据严格的周顺序,它们是等效的(这就是 !(a < b) && !(b < a)
的意思)。这并不一定意味着这些元素是相等的。
一个很好的例子是字符串之间不区分大小写的比较。在那种情况下,我们肯定会有 !("ab" < "AB") && !("AB" < "ab")
,并且两个字符串是等效的,但它们的值不相等。
说了这么多。如果您定义的顺序关系暗示了您的类型的所有其他关系,则 there are tricks 从中生成所有其他操作。正如表格所示。
关于c++ - "<"是否满足严格的弱排序意味着不需要 "=="定义?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51184545/