gpt4 book ai didi

c++ - 下面的比较器函数在 C++ 中是如何工作的?

转载 作者:太空宇宙 更新时间:2023-11-04 15:12:27 24 4
gpt4 key购买 nike

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}

但是我无法理解它是如何工作的,有人可以解释一下吗?

最佳答案

你的断言在两个方面是不正确的:

  1. std::sort 保证保留不需要排序的元素的顺序,如果你明白我的意思的话。

  2. 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com