新闻中心

c++如何自定义排序算法_c++ std::sort与自定义比较函数

2025-12-04
浏览次数:
返回列表
std::sort 可通过自定义比较函数或 lambda 表达式实现灵活排序,如用 a > b 实现降序,或按字符串长度排序。

c++如何自定义排序算法_c++ std::sort与自定义比较函数

在C++中,std::sort 是一个高效且常用的排序函数,定义在 algorithm 头文件中。它默认对元素进行升序排列,但通过传入自定义比较函数,可以灵活控制排序规则。

自定义比较函数的基本用法

要使用自定义排序,需提供一个能比较两个元素的函数或函数对象。该函数接收两个参数,返回 true 表示第一个元素应排在第二个元素之前。

例如,对整数数组降序排序:

bool cmp(int a, int b) { return a > b; // a 排在 b 前面当 a 更大 } std::vector nums = {3, 1, 4, 1, 5}; std::sort(nums.begin(), nums.end(), cmp);

Lambda 表达式实现更简洁的自定义排序

C++11 起支持使用 lambda 表达式直接内联定义比较逻辑,无需额外函数。

比如按字符串长度排序:

std::vector<:string>words = {"apple", "hi", "banana"}; std::sort(words.begin(), words.end(), [](const std::string& a, const std::string& b) { return a.length()

这段代码将字符串按长度从小到大排列。

Health AI健康云开放平台 Health AI健康云开放平台

专注于健康医疗垂直领域的AI技术开放平台

Health AI健康云开放平台 113 查看详情 Health AI健康云开放平台

结构体或类的自定义排序

对于复杂类型,可通过比较特定成员实现排序。例如有如下结构体:

struct Person { std::string name; int age; }; std::vector people = {{"Alice", 25}, {"Bob", 20}, {"Charlie", 30}}; // 按年龄升序 std::sort(people.begin(), people.end(), [](const Person& a, const Person& b) { return a.age

也可扩展为先按年龄再按名字排序:

return a.age == b.age ? a.name

注意事项与常见错误

自定义比较函数必须满足严格弱序(strict weak ordering)关系,否则行为未定义。

  • 不能对相同元素返回 true:cmp(a, a) 必须为 false
  • 若 cmp(a, b) 为 true,则 cmp(b, a) 应为 false(除非相等)
  • 避免浮点数精度问题影响比较结果

使用时建议保持比较逻辑简洁明确,优先使用 lambda 提高可读性。

基本上就这些。掌握自定义比较函数后,std::sort 可应对绝大多数排序需求。

以上就是c++++如何自定义排序算法_c++ std::sort与自定义比较函数的详细内容,更多请关注其它相关文章!


# go  # 衡水京东网站推广介绍  # 南阳网站推广设计  # 武汉网站推广电话  # 丹东seo公司打造营销  # 医疗seo面试  # 序列化  # 按年  # 是一个  # 工作机制  # 化与  # 排在  # 可通过  # 升序  # 都是  # 自定义  # 排列  # 排序算法  # apple  # c++  # app  # word  # 晋州网站推广平台有哪些  # 江西营销型网站定制推广  # seo交易引流  # 巴中手机网站建设营销  # 隐性url和seo 


相关栏目: 【 科技资讯46185 】 【 网络学院92790


相关推荐: LINUX下如何进行磁盘分区_fdisk与parted工具在LINUX中的使用对比  在J*a中如何使用Exception包装底层异常_异常包装与信息传递方法说明  解决深度学习模型训练初期异常高损失与完美验证准确率问题  顺丰快递查单号物流信息 顺丰快递小程序查询入口  12306选座怎么选到商务座_12306商务座选择与配置说明  天猫双十一预售商品怎么退款_天猫双十一预售退款操作指南  将HTML Canvas内容转换为可上传的图像文件(File对象)  最新韩小圈网页版登录入口_官网在线观看官方链接  Gmail邮箱申请注册直达_Gmail邮箱免费注册PC版官网入口2025  优化HTML表单样式:解决输入框焦点跳动与元素间距问题  Windows电脑怎么截图最方便_系统自带截图工具的5种神仙用法【技巧】  c++如何使用TBB库进行任务并行_c++ Intel线程构建模块  Golang切片为何属于引用类型_Golang slice底层结构与引用语义说明  Golang如何实现简单的Web表单_Golang表单提交与验证处理方法  QQ邮箱网页版邮箱入口 QQ邮箱官方登录平台  如何为你的Composer包编写自动化测试_集成PHPUnit到Composer的scripts工作流  QQ邮箱稳定登录入口_QQ邮箱官方网站网页版使用  QQ邮箱官方网站登录入口_QQ邮箱网页版在线使用  QQ邮箱官方邮箱登录入口 QQ邮箱网页版快速访问  漫蛙官网正版漫画入口 漫蛙2官方网页登录地址  马斯克:Optimus 人形机器人复数形式为 Optimi  J*aScript打印功能_j*ascript输出控制  MAC怎么让Dock栏只显示当前运行的应用_MAC终端命令实现极简Dock栏  抓大鹅无需下载版 抓大鹅秒玩版入口  NRF24L01数据传输深度解析:解决大载荷接收异常与分包策略  神庙逃亡小游戏在线玩 神庙逃亡小游戏入口  css绝对定位元素脱离父容器怎么办_确保父元素position非static  Mudbox图层蒙版怎么用_Mudbox图层蒙版数字雕刻应用技巧  Composer如何在生产环境安全地执行composer update  Excel文件在线转换快速入口 Excel在线格式转换网站  绝地鸭卫平a核爆刀流玩法攻略  向日葵客户端怎么进行远程CentOS控制_向日葵客户端远程CentOS控制操作教程  Centos/Linux 系统下安装 composer 的完整步骤  windows10怎么查看硬盘序列号_windows10硬盘id查询命令  AO3官网镜像链接 Archive of Our Own同人文在线浏览  J*a应用程序首次运行自动创建文件与目录的最佳实践  怎样更改Windows系统的默认安装路径_避免C盘爆满的终极设置【技巧】  AO3官方在线访问地址 Archive of Our Own最新镜像合集  Win11怎么开启省电模式_Win11电池节电模式自动开启  CSS条件样式无法按设备触发怎么排查_media条件语句正确设置解决触发问题  C++ vector二维数组定义_C++ vector of vector用法  必由学在线入口 必由学网页版快速登录入口  如何使用spryker/configurable-bundles-products-resource-relationship模块解决复杂产品捆绑关系难题  印象笔记如何设提醒任务防漏执行_印象笔记设提醒任务防漏执行【任务提醒】  深入理解Google Cloud Datastore查询:祖先路径与数据一致性  《铁拳8》黑皮辣妹新实机:元气满满的18岁少女!  Go与Ruby之间实现AES加密互通:CFB模式下的密钥长度匹配策略  深入理解J*a编译器的兼容性选项:从-source到--release  Mac终端命令大全_Mac常用Terminal指令速查  Golang如何处理RPC请求负载均衡_Golang RPC请求负载均衡策略与实践 

搜索