【发布时间】:2016-11-27 22:20:51
【问题描述】:
如何评估二元谓词?
例如,如果我想按降序排序,那么我应该写:
bool isGreater(int x, int y)
{
return x > y;
}
或
bool isGreater(int x, int y)
{
return y > x;
}
两者之间究竟有什么区别?我知道这两个参数会相互比较,但返回结果应该是什么 - true 或 false?这有什么关系?所以,我的问题基本上是,如果我不知道它们传递的顺序,我如何确定第一个参数是否应该在第二个之前?
sort() 函数将以这种方式调用(@987654328@ 是要排序的数组):
sort(height, height+N, isGreater);
注意:我确实引用了this one 和this one 之类的链接,但他们并没有明确关注这个问题。
有人可以澄清我的疑问吗?谢谢!
【问题讨论】:
-
是的。但是,当我想按降序排序时,如何确定使用哪一个?如何调用二元谓词以及它的参数是什么?
-
如果第一个参数应该在第二个参数之前,谓词应该返回 true。因此,对于降序,您需要 x > y。
-
当然可以。该算法将根据需要执行尽可能多的比较以确定所有元素的相对顺序。
-
只要排序算法需要决定任何两个元素如何仅相对于它们自身进行排序,就会调用谓词。我们不知道排序算法是如何工作的。可以调用谓词来比较我们集合中的任何两个元素。它通常会在单个排序操作过程中被多次调用。
-
不,使用谓词的全部意义在于您只需要一种排序算法。享受它很容易的事实。