我有一段令我困惑的代码:
sort(data, data+count, greater<int>() );
Run Code Online (Sandbox Code Playgroud)
它是C标准库中的排序函数.我无法弄清楚第三个论点的含义.我已经读过它被称为二元谓词.这意味着什么?我如何制作自己的谓词?
在std :: sort中,您可以提供第三个参数,该参数是对列表进行排序的基础.如果您希望第一个参数首先出现,则返回true.如果您希望第一个参数首先出现,则返回false.我遇到的问题是我的谓词函数应该是一个"无效的比较器",我已经将它缩小到它不符合以下要求的事实:
if arg1 == arg2, compare function MUST return false.
Run Code Online (Sandbox Code Playgroud)
我已经看过一些术语,例如std :: sort需要"严格的弱排序".除了2个地方,我得到的关于这些主题的所有其他页面似乎都是技术论文,我无法理解.我能理解的是:
In weak ordering some elements "may be tied" with each other.
Run Code Online (Sandbox Code Playgroud)
但对我来说,这也是"部分有序集合"的含义,它是:
"there may be pairs of elements for which neither element precedes the other"
Run Code Online (Sandbox Code Playgroud)
而且,我无法理解其中任何一个中的"严格"含义.
撇开我对订单理论术语的困惑,我的问题是,如果在比较函数中,参数1和参数2是相等的,在这种情况下,我不关心哪一个先于另一个(之前的任何一个会让我开心),为什么我不能回归真的让争论1先来?
我还要问我的程序实际上是如何知道它是一个无效的比较器,但后来我认为它可能只是在比较函数返回true时检查arg1和arg2是否相等.