全网整合营销服务商

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

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

C++ sort函数怎么用_C++ STL排序算法自定义比较函数教程

std::sort是C++ STL中用于高效排序的函数,定义在头文件中,支持基本类型和自定义类型的排序。1. 对基本类型如int、double,默认使用升序排列,可通过std::greater实现降序。2. 对结构体或复杂对象,需提供自定义比较函数,该函数返回bool值表示第一个参数是否应排在第二个之前,例如按学生成绩从高到低排序。3. C++11起推荐使用Lambda表达式实现灵活排序逻辑,如先按分数降序再按名字升序。4. 注意事项包括:比较函数必须满足严格弱序;建议使用const引用避免拷贝;std::sort不保证稳定性,需稳定时用std::stable_sort;仅适用于支持随机访问迭代器的容器如vector,list应使用其成员函数sort。掌握这些用法可应对各类排序需求。

在C++中,std::sort 是 STL 算法库中最常用的排序函数之一。它定义在 gorithm> 头文件中,可以对数组、vector 等容器中的元素进行高效排序。默认情况下,它按升序排列,但你也可以通过自定义比较函数来控制排序规则。

基本用法:对基本类型排序

对 int、double 等基本数据类型排序时,直接使用 std::sort 即可:

#include 
#include 
#include 

int main() { std::vector nums = {5, 2, 8, 1, 9}; std::sort(nums.begin(), nums.end()); // 升序 // 输出: 1 2 5 8 9

std::sort(nums.begin(), nums.end(), std::greaterzuojiankuohaophpcnintyoujiankuohaophpcn()); // 降序
// 输出: 9 8 5 2 1

}

自定义比较函数:对结构体或复杂对象排序

当你需要对结构体、类对象或有特定排序逻辑的数据进行排序时,就需要传入自定义的比较函数。这个函数要返回布尔值,表示第一个参数是否“应该排在”第二个参数之前。

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

// 自定义比较函数:按分数从高到低排序 bool cmp(const Student& a, const Student& b) { return a.score > b.score; // 分数高的在前 }

int main() { std::vector students = { {"Alice", 85}, {"Bob", 92}, {"Charlie", 78} };

std::sort(students.begin(), students.end(), cmp);

// 结果: Bob(92), Alice(85), Charlie(78)

}

使用 Lambda 表达式(推荐)

C++11 起支持 Lambda,写起来更简洁,尤其适合简单排序逻辑:

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

// 按名字字母顺序排序 std::sort(students.begin(), students.end(), [](const Student& a, const Student& b) { return a.name < b.name; });

// 先按分数降序,分数相同时按名字升序 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 < b.name; });

注意事项

  • 比较函数必须严格弱排序(strict weak ordering),不能写错逻辑导致死循环或崩溃。
  • 若使用自定义函数或 lambda,参数建议用 const 引用,避免拷贝开销。
  • std::sort 不保证稳定排序;如需稳定排序,使用 std::stable_sort。
  • 只能用于支持随机访问迭代器的容器(如 vector、array),不适用于 list(list 有自己的 sort 成员函数)。

基本上就这些。掌握好自定义比较方式,就能灵活应对各种排序需求了。


# go  # ai  # c++  # ios  # stream  # 排序算法  # 排列  # 数据类型  # Array  # sort  # 成员函数  # const  # 结构体  # bool  # int  # double  # 循环  # Lambda  # 对象  # 算法  # 自定义  # 升序  # 降序  # 第一个  # 第二个  # 排在  # 自己的  # 到低  # 头文件  # 迭代 


相关文章: 专业型网站制作公司有哪些,我设计专业的,谁给推荐几个设计师兼职类的网站?  建站主机选哪种环境更利于SEO优化?  如何规划企业建站流程的关键步骤?  如何在Golang中实现微服务服务拆分_Golang微服务拆分与接口管理方法  Python文件管理规范_工程实践说明【指导】  云南网站制作公司有哪些,云南最好的招聘网站是哪个?  香港服务器网站测试全流程:性能评估、SEO加载与移动适配优化  C#如何使用XPathNavigator高效查询XML  建站之星客服服务时间及联系方式如何?  如何在万网自助建站中设置域名及备案?  b2c电商网站制作流程,b2c水平综合的电商平台?  如何在香港服务器上快速搭建免备案网站?  高端网站建设与定制开发一站式解决方案 中企动力  如何续费美橙建站之星域名及服务?  金*站制作公司有哪些,金华教育集团官网?  如何通过商城自助建站源码实现零基础高效建站?  建站主机服务器选购指南:轻量应用与VPS配置解析  深圳 网站制作,深圳招聘网站哪个比较好一点啊?  简单实现Android验证码  如何确认建站备案号应放置的具体位置?  装修招标网站设计制作流程,装修招标流程?  高端企业智能建站程序:SEO优化与响应式模板定制开发  专业制作网站的公司哪家好,建立一个公司网站的费用.有哪些部分,分别要多少钱?  如何选择靠谱的建站公司加盟品牌?  矢量图网站制作软件,用千图网的一张矢量图做公司app首页,该网站并未说明版权等问题,这样做算不算侵权?应该如何解决?  做企业网站制作流程,企业网站制作基本流程有哪些?  电商网站制作公司有哪些,1688网是什么意思?  如何注册花生壳免费域名并搭建个人网站?  公司门户网站制作流程,华为官网怎么做?  建站之星如何快速生成多端适配网站?  如何用PHP工具快速搭建高效网站?  建站之星多图banner生成与模板自定义指南  网页制作模板网站推荐,网页设计海报之类的素材哪里好?  网站设计制作公司地址,网站建设比较好的公司都有哪些?  浅谈Javascript中的Label语句  西安专业网站制作公司有哪些,陕西省建行官方网站?  西安制作网站公司有哪些,西安货运司机用的最多的app或者网站是什么?  如何在景安云服务器上绑定域名并配置虚拟主机?  宝塔建站助手安装配置与建站模板使用全流程解析  西安市网站制作公司,哪个相亲网站比较好?西安比较好的相亲网站?  模具网站制作流程,如何找模具客户?  香港服务器租用费用高吗?如何避免常见误区?  如何在沈阳梯子盘古建站优化SEO排名与功能模块?  如何在IIS中新建站点并配置端口与IP地址?  建站之星伪静态规则如何正确配置?  上海网站制作网页,上海本地的生活网站有哪些?最好包括生活的各个方面的?  如何通过商城免费建站系统源码自定义网站主题?  整人网站在线制作软件,整蛊网站退不出去必须要打我是白痴才能出去?  枣阳网站制作,阳新火车站打的到仙岛湖多少钱?  建站主机服务器选型指南与性能优化方案解析 

您的项目需求

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