全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

C++ sort函数自定义排序规则_C++ std::sort比较函数的写法

答案:使用std::sort需提供满足严格弱序的比较函数,可采用普通函数、lambda表达式或函数对象形式,用于自定义排序规则。

在使用 C++ 的 std::sort 函数时,如果要对自定义类型或非默认顺序进行排序,需要提供比较函数。这个比较函数决定了元素之间的“小于”关系,从而控制排序结果。

基本语法与要求

std::sort 定义在 algorithm 头文件中,其常用形式为:

std::sort(begin, end, comp);

其中 comp 是可选的比较函数或函数对象。它必须满足“严格弱序”(Strict Weak Ordering),即对于任意两个元素 a 和 b:

  • 如果 comp(a, b) 返回 true,则 a 应排在 b 前面。
  • 不能同时有 comp(a, b)comp(b, a) 为 true。
  • 若 a 和 b 相等(互不小于对方),它们的相对顺序可能变化(不稳定排序除非特别保证)。

比较函数的三种写法

1. 普通函数

适用于简单场景,比如按整数大小逆序排列:

bool cmp(int a, int b) {
    return a > b; // 降序
}

std::vector vec = {3, 1, 4, 1, 5};
std::sort(vec.begin(), vec.end(), cmp);

也可以用于结构体:

struct Student {
    std::string name;
    int score;
};

bool cmpStudent(const Student& a, const Student& b) {
    return a.score }

2. Lambda 表达式(推荐)

更灵活、可读性强,适合局部逻辑:

std::vector students = {/*...*/};

// 按分数降序,分数相同时按名字字典序升序
std::sort(students.begin(), students.end(), [](const Student& a, const Student& b) {
    if (a.score != b.score)
        return a.score > b.score;
    return a.name });

一行写法(简单情况):

std::sort(vec.begin(), vec.end(), [](int a, int b) { return a

3. 函数对象(仿函数)

适合复杂逻辑或需携带状态的情况:

struct CompareStudent {
    bool operator()(const Student& a, const Student& b) const {
        return a.score     }
};

std::sort(students.begin(), students.end(), CompareStudent{});

常见注意事项

  • 比较函数应返回 bool 类型,且不要修改传入参数(建议用 const 引用)。
  • 避免写成 return a ,这会破坏严格弱序(相等时不应返回 true)。
  • Lambda 中若捕获变量,注意是否影响性能或逻辑。
  • 结构体排序时,优先考虑复合条件下的分支处理。

基本上就这些。掌握这几种写法后,可以应对大多数排序需求。实际开发中推荐使用 lambda,简洁直观。


# go  # c++  # 排列  # String  # if  # sort  # const  # 结构体  # bool  # int  # Lambda  # Struct  # operator  # 对象  # 自定义  # 升序  # 降序  # 推荐使用  # 适用于  # 三种  # 几种  # 不应  # 可选  # 要对 


相关文章: 如何通过远程VPS快速搭建个人网站?  如何快速搭建响应式可视化网站?  郑州企业网站制作公司,郑州招聘网站有哪些?  宠物网站制作html代码,有没有专门介绍宠物如何养的网站啊?  齐河建站公司:营销型网站建设与SEO优化双核驱动策略  建站VPS推荐:2025年高性能服务器配置指南  c++怎么用jemalloc c++替换默认内存分配器【性能】  C#如何在一个XML文件中查找并替换文本内容  如何在阿里云ECS服务器部署织梦CMS网站?  ,购物网站怎么盈利呢?  如何登录建站主机?访问步骤全解析  公司网站制作费用多少,为公司建立一个网站需要哪些费用?  如何选购建站域名与空间?自助平台全解析  零基础网站服务器架设实战:轻量应用与域名解析配置指南  如何用西部建站助手快速创建专业网站?  如何用IIS7快速搭建并优化网站站点?  建站之星展会模版如何一键下载生成?  如何快速查询网站的真实建站时间?  如何高效利用亚马逊云主机搭建企业网站?  公司网站建设制作费用,想建设一个属于自己的企业网站,该如何去做?  平台云上自助建站如何快速打造专业网站?  C#怎么使用委托和事件 C# delegate与event编程方法  简历在线制作网站免费版,如何创建个人简历?  如何选择高效响应式自助建站源码系统?  常州企业建站如何选择最佳模板?  如何在服务器上配置二级域名建站?  *服务器网站为何频现安全漏洞?  定制建站模板如何实现SEO优化与智能系统配置?18字教程  深圳网站制作设计招聘,关于服装设计的流行趋势,哪里的资料比较全面?  如何快速生成专业多端适配建站电话?  Swift中循环语句中的转移语句 break 和 continue  建站主机服务器选购指南:轻量应用与VPS配置解析  哈尔滨网站建设策划,哈尔滨电工证查询网站?  如何选择适合PHP云建站的开源框架?  焦点电影公司作品,电影焦点结局是什么?  移动端手机网站制作软件,掌上时代,移动端网站的谷歌SEO该如何做?  北京的网站制作公司有哪些,哪个视频网站最好?  如何在Golang中指定模块版本_使用go.mod控制版本号  mc皮肤壁纸制作器,苹果平板怎么设置自己想要的壁纸我的世界?  ,在苏州找工作,上哪个网站比较好?  如何选择靠谱的建站公司加盟品牌?  香港服务器网站搭建教程-电商部署、配置优化与安全稳定指南  建站之星安装后如何自定义网站颜色与字体?  在线ppt制作网站有哪些,请推荐几个好的课件下载的网站?  教学网站制作软件,学习*后期制作的网站有哪些?  建站之星上传入口如何快速找到?  潍坊网站制作公司有哪些,潍坊哪家招聘网站好?  深圳网站制作平台,深圳市做网站好的公司有哪些?  如何配置FTP站点权限与安全设置?  个人网站制作流程图片大全,个人网站如何注销? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。