C++ 中二元谓词的求值
Evaluation of the binary predicates in C++
如何计算二元谓词?
比如我要降序排列,那么应该写成:
bool isGreater(int x, int y)
{
return x > y;
}
或
bool isGreater(int x, int y)
{
return y > x;
}
两者到底有什么区别?我知道这两个参数会相互比较,但是 return 结果应该是什么 - true
或 false
?这有什么关系呢?所以,我的问题基本上是,如果我不知道第一个参数的传递顺序,我如何确定第一个参数是否应该在第二个参数之前?
sort()
函数将以这种方式调用(height
是要排序的数组):
sort(height, height+N, isGreater);
注意:我确实参考了像this one and this one这样的链接,但他们并没有明确关注这个问题。
有人可以澄清我的疑问吗?谢谢!
这是一个非常简单的伪代码升序排序算法:
for i ← 1 to length(A)-1
j ← i
while j > 0 and A[j-1] > A[j]
swap A[j] and A[j-1]
j ← j - 1
end while
end for
谓词 "MyCompare(x, y) { return x <= y; }" 同样的事情看起来像这样:
for i ← 1 to length(A)-1
j ← i
while j > 0 and MyCompare(A[j-1], A[j]) == false
swap A[j] and A[j-1]
j ← j - 1
end while
end for
现在排序算法只要改变谓词就可以按任意顺序排序。由于此谓词是 std::sort 的参数,这意味着 std::sort 可以按任何顺序排序。
如何计算二元谓词?
比如我要降序排列,那么应该写成:
bool isGreater(int x, int y)
{
return x > y;
}
或
bool isGreater(int x, int y)
{
return y > x;
}
两者到底有什么区别?我知道这两个参数会相互比较,但是 return 结果应该是什么 - true
或 false
?这有什么关系呢?所以,我的问题基本上是,如果我不知道第一个参数的传递顺序,我如何确定第一个参数是否应该在第二个参数之前?
sort()
函数将以这种方式调用(height
是要排序的数组):
sort(height, height+N, isGreater);
注意:我确实参考了像this one and this one这样的链接,但他们并没有明确关注这个问题。
有人可以澄清我的疑问吗?谢谢!
这是一个非常简单的伪代码升序排序算法:
for i ← 1 to length(A)-1
j ← i
while j > 0 and A[j-1] > A[j]
swap A[j] and A[j-1]
j ← j - 1
end while
end for
谓词 "MyCompare(x, y) { return x <= y; }" 同样的事情看起来像这样:
for i ← 1 to length(A)-1
j ← i
while j > 0 and MyCompare(A[j-1], A[j]) == false
swap A[j] and A[j-1]
j ← j - 1
end while
end for
现在排序算法只要改变谓词就可以按任意顺序排序。由于此谓词是 std::sort 的参数,这意味着 std::sort 可以按任何顺序排序。