我对严格弱排序背后的数学知之甚少。但我读过一些东西:



那么这是否意味着不需要“==”定义,因为“< 和 == 。)

一个易于理解的解释也将非常受欢迎:D。没有必要太“数学”或“技术上正确”。

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

最佳答案

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

上表假设对许多类型和排序关系都适用,但并非对所有类型都适用。它假设两个元素之间的等价意味着相等。那不必持有。

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

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

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

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

10-11 22:42
查看更多