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++ - 用于 `std::sort` 的自定义迭代器

c++ - 如何在 QGraphicsScene 上绘制彩色文本?

c++ - 是否有可能在其工作后将线程连接到 'parallel for' 区域?

c++ - 在 C++ 中静态初始化匿名 union

c++ - 创建不可移动类型的 std::vector

派生类上的 C++ 赋值运算符实现

c++ - 添加 boost/asio 时未定义对 `boost::system::generic_category()' 的引用

请求变量时的 C++ 调用函数

c++ - Boost、异常、线程和异步,我该如何处理?

c++ - 检查 NULL 值 C++ 的引用