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

标签 c++

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/

相关文章:

c++ - 转发引用的参数类型检查不起作用

c++ - 如何更新到 C++11?

c++ - Arduino WiFi101 库 - 将 WiFi 和 WiFiClient 传递给子类

c++ - QGridLayout addWidget(CustomWidget) 不工作

c++ - 使用 QAudioRecorder 时禁止创建 wav 文件

c++ - 如何让GCC编译器将变量除法转换为mul(如果更快)

c++ - OOP可以在嵌入式C中使用吗?

c++ - 为什么可变参数模板构造函数比复制构造函数更匹配?

c++ - 使用 pybind11 从 C++ 调用 Python 函数

C++ 将任何类型的参数发送给函数