为什么当参数相等时 std::sort 比较函数必须返回 false?

2023-12-20

在 std::sort 中,您可以提供第三个参数,它是列表排序方式的基础。如果您希望第一个参数先出现,则返回 true。如果您希望第二个参数先出现,则返回 false。我遇到了这样的问题:我的谓词函数应该是“无效的比较器”,我已将其范围缩小到它不满足以下要求的事实:

if arg1 == arg2, compare function MUST return false.

我见过一些术语,例如 std::sort 需要“严格的弱排序”。除了两个地方之外,我得到的所有其他关于这些主题的页面似乎都是技术论文,我无法理解。我能理解的是:

In weak ordering some elements "may be tied" with each other.

但对我来说这也是“偏序集”的含义,即:

"there may be pairs of elements for which neither element precedes the other"

此外,我无法理解它们中的“严格”意味着什么。

抛开我对顺序论术语的困惑不谈,我的问题是在比较函数中参数 1 和参数 2 是否相等,在这种情况下我不关心哪个在另一个之前(任何一个在之前都会让我高兴),为什么我不能返回 true 让参数 1 首先出现?

我还想问我的程序如何知道它是一个无效的比较器,但后来我想它可能只是在比较函数返回 true 时检查 arg1 和 arg2 是否相等。


比较函数只是对“小于”运算符进行建模。考虑如何<运算符适用于基本类型,例如int:

int a = 1, b = 2;     a < b == true      a is less than b
int a = 2, b = 1;     a < b == false     a is not less than b, because a is greater than b
int a = 1, b = 1;     a < b == false     a is not less than b, because a equals b

返回true意味着你想要a之前订购b。所以返回false如果情况并非如此,或者因为您想要b之前订购a,或者因为它们的顺序并不重要。

如果你回来true当参数相等时,你就说你想要a来之前b你想要b来之前a,这是一个矛盾。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么当参数相等时 std::sort 比较函数必须返回 false? 的相关文章

随机推荐