You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++ sort函数中compare比较器内部工作原理及疑问解答

关于C++ sort自定义比较函数的疑问解答

先贴出你提供的代码:

#include <iostream>
#include<bits/stdc++.h>
using namespace std;

bool compare (int a, int b)
{
    return a>b;
}

int main() 
{
    int arr[5]= {1,2,5,9,6};
    sort (arr,arr+5, compare);
    
    for (auto i: arr)
    cout << i << " ";

    return 0;
}

疑问1:调用sort时为何compare后不加(),与普通函数调用方式不同?

这里传递的是函数指针,不是调用函数。sort的第三个参数需要的是一个「可调用对象」(比如函数指针、lambda、仿函数),用来指定排序规则。如果加了(),就会直接执行compare函数并返回一个bool值,这不符合sort对参数的类型要求——它需要的是能接收两个int参数、返回bool的函数的地址,而非一个现成的bool结果。

疑问2:未手动传递参数,compare函数如何获取参数值?

参数是由sort函数内部自动传递的。sort在执行排序逻辑时(比如遍历元素、判断交换时机的过程中),会不断取出数组中的两个元素,作为参数传给你定义的compare函数,以此判断两者的相对顺序是否符合规则。你只需要定义好比较逻辑,具体的调用时机和参数传递都由sort的内部实现完成。

疑问3:返回true和false为何能实现数组的降序排序?

sort的核心规则是:如果compare(a, b)返回true,就会把a放在b的前面;如果返回false,则调整两者位置(或保持原位置,取决于具体排序算法)。

你的compare函数返回a > b,意思是「当a比b大时,a应该排在b前面」。sort会根据这个规则,把更大的元素逐步往前调整,最终整个数组就变成了降序排列。如果用默认的升序排序(不写第三个参数),等价于使用less<int>(),也就是判断a < b为true时a在前,正好和你的规则相反。

内容的提问来源于stack exchange,提问作者Shroud

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 09:39:26