在 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(使用前将#替换为@)