bool comp(int a,int b){
if ((a > 0 && b > 0) || (a < 0 && b < 0))
return false;
if ((a > 0) && (b < 0))
return false;
}
对于包含正整数和负整数的给定数组,上述函数可用于重新排列数组,使负整数后跟正整数,并保持元素的顺序。
示例:
int arr [] = {1,2,-3,-1}, n=sizeof(arr)/sizeof(int);
sort(arr,arr+n, comp);
output : {-3,-1,1,2}
但是我无法理解它是如何工作的,有人可以解释一下吗?
最佳答案
你的断言在两个方面是不正确的:
std::sort
不保证保留不需要排序的元素的顺序,如果你明白我的意思的话。comp
函数的行为是未定义,因为它在所有控制路径上都没有明确的return
值。
一种补救方法是使用 std::stable_sort
,它会尽可能地保留元素的顺序。如果第一个参数为负而第二个为正(让我们将 0 定义为正),比较器函数可以调整为 true
:
bool comp(int a, int b){
return a < 0 && b >= 0;
}
另一种补救措施是使用 std::stable_partition
。
关于c++ - 下面的比较器函数在 C++ 中是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50597496/