新闻中心

c++如何使用sort函数自定义排序_C++自定义比较规则实现方法

2025-11-18
浏览次数:
返回列表
使用自定义比较规则可灵活控制C++中sort函数的排序逻辑,支持函数指针、仿函数和Lambda表达式三种方式。1. 函数指针适用于简单降序等场景,如bool cmp(int a, int b) { return a > b; }实现整数降序排列。2. 仿函数通过重载()运算符定义比较逻辑,如struct CmpByLength { bool operator()(const string& a, const string& b) { return a.length()

c++如何使用sort函数自定义排序_c++自定义比较规则实现方法

在C++中使用sort函数进行自定义排序,关键在于提供一个自定义的比较规则。这个规则可以通过函数指针、仿函数(函数对象)或Lambda表达式来实现。默认情况下,sort按照元素的“小于”关系升序排列,但通过自定义比较函数,可以灵活控制排序逻辑。

1. 使用函数指针定义比较规则

可以编写一个返回bool类型的函数,接收两个参数,当第一个参数应排在第二个之前时返回true

示例:按整数降序排列

#include <algorithm>
#include <vector>
using namespace std;

bool cmp(int a, int b) {
    return a > b; // 降序:a排在b前当a更大
}

int main() {
    vector<int> nums = {3, 1, 4, 1, 5};
    sort(nums.begin(), nums.end(), cmp);
    // 结果:{5, 4, 3, 1, 1}
    return 0;
}

2. 使用仿函数(函数对象)

定义一个类或结构体,重载()运算符,使其行为像函数。

示例:按字符串长度排序

struct CmpByLength {
    bool operator()(const string& a, const string& b) {
        return a.length() < b.length();
    }
};

vector<string> words = {"hi", "hello", "ok&quot;, "yes"};
sort(words.begin(), words.end(), CmpByLength());
// 结果:{"hi", "ok", "yes", "hello"}

这种方式在STL中很常见,编译器通常能更好优化仿函数。

Whimsical Whimsical

Whimsical推出的AI思维导图工具

Whimsical 182 查看详情 Whimsical

3. 使用Lambda表达式(推荐)

C++11起支持Lambda,适合简单、局部的比较逻辑,写法简洁。

示例:对pair按第二关键字升序

vector<pair<int, int>> vp = {{1,5}, {2,3}, {3,3}};
sort(vp.begin(), vp.end(), [](const auto& a, const auto& b) {
    if (a.second != b.second)
        return a.second < b.second;
    return a.first < b.first;
});

Lambda避免了额外命名,代码更集中易读。

4. 注意事项与技巧

  • 比较函数必须满足“严格弱序”:不能对相同元素返回true,即cmp(a,a)必须为false
  • 若需稳定排序,可使用stable_sort,保持相等元素的原始顺序。
  • 对自定义类型(如结构体),可在类外单独定义比较逻辑,提高复用性。
  • Lambda捕获列表一般为空([]),除非需要外部变量参与比较。

基本上就这些。选择哪种方式取决于场景:简单逻辑用Lambda,复杂或复用多的用仿函数,传统场合可用函数指针。掌握这些方法后,sort可以应对各种排序需求。

以上就是c++++如何使用sort函数自定义排序_C++自定义比较规则实现方法的详细内容,更多请关注其它相关文章!


# 化与  # 版画素材网站建设  # 营销推广的必要性和意义  # 韶关关键词网站优化排名  # 莆田网站建设客服  # 凌源网络营销推广  # 宜宾营销推广找哪家公司  # 建设一个网站引言  # 苏州推广网站包括什么  # 怎么推广代理网站  # 通州区自助建站seo  # 复用  # 工作机制  # word  # 排在  # 降序  # 如何使用  # 升序  # 运算符  # 都是  # 自定义  # 排列  # c++  # ai  # go 


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


相关推荐: QQ邮箱官方邮箱登录入口 QQ邮箱网页版快速访问  Win10文件资源管理器“此电脑”分组怎么关 Win10恢复经典视图【技巧】  React Hooks最佳实践:动态组件状态管理的组件化方案  在J*a中如何在J*a中使用异常机制记录错误日志_异常日志实践经验  Go语言JSON解析深度指南:动态访问与结构体映射实践  正确连接J*aScript到HTML实现可点击图片与自定义事件处理  2026年发布! 美少女养成动作RPG《神剑少女战记》发布实机演示  格力空气能E5故障代码是什么情况_格力空气能E5代码解析与应对措施  c++如何实现一个简单的ECS框架_c++数据驱动设计与游戏开发  《燕云十六声》两周内达九百万玩家!位居畅销榜第五  Composer的 "licenses" 命令如何帮助你遵守开源协议_检查项目依赖的许可证合规性  斑马英语APP如何开启夜间护眼阅读_斑马英语APP夜间模式与低蓝光设置教程  解决Python logging 中 datefmt 导致时间戳固定不变的问题  深入理解J*a链表中的IPosition接口与使用  React Router v6 教程:构建认证保护的私有路由与重定向策略  Promise错误处理:在catch后终止链式then执行的策略  理解Python模块与全局变量的作用域管理  Win11截图该按哪些键 Win11截屏完整流程解析【教程】  J*aScript异步迭代器_j*ascript异步遍历  C#使用XPath查询节点时出错? 常见语法错误与调试技巧  漫蛙2(台版)官方入口地址 漫蛙2(台版)正版漫画网页端  css链接悬停下划线样式如何自定义_使用::after结合content和transition  如何更改在 Excel 中打开超链接时的默认浏览器  理解J*aScript Promise的微任务队列与执行顺序  Angular中单选按钮的正确使用与常见陷阱解析  电脑屏幕颜色不舒服怎么办_Windows夜间模式与色彩校准教程【护眼技巧】  Excel中VLOOKUP的第四个参数是干什么用的_Excel VLOOKUP第四参数作用解析  构建轻量级网站内部消息系统:Formspree 集成指南  J*aScript类型检查_j*ascript代码规范  漫蛙MANWA漫画主页官方入口 漫蛙漫画最新在线阅读地址  TikTok搜索不到用户发布内容怎么办 TikTok用户内容搜索优化方法  Python类型检查:优化关联可选属性的Mypy推断策略  sublime怎么设置启动时打开的窗口_sublime会话管理与热退出  J*a递归快速排序中静态变量导致数据累积问题的解决方案  wps文字怎么插入目录并自动更新_wps文字如何插入目录并自动更新方法  Golang如何实现Web接口签名验证_Golang Web接口签名校验开发方法  优酷会员付费后没到账怎么办_优酷会员充值异常及解决方法  J*a里如何使用N*igableMap进行导航操作_可导航Map操作技巧解析  Golang如何使用bytes.Split分割字节切片_Golang bytes切片分割方法  KFC早餐时段怎么领特惠代码_KFC早餐订餐优惠代码获取与使用说明  谷歌浏览器无痕模式怎么开 Chrome开启无痕浏览设置方法【教程】  怎么在mac上运行html代码_mac运行html代码方法【指南】  在WordPress中通过REST API获取BasicAuth保护的远程文章  MongoDB Aggregation:在嵌套对象数组中精确匹配ObjectId  学习通网页版官方登录 超星学习通电脑端入口指南  J*aScript动态修改指定div内所有a标签样式指南  如何在CSS中使用浮动制作导航栏_float实现水平菜单  豆包手机助手发布技术预览版:直接嵌入手机系统!努比亚样机发售  PHP中SSG-WSG API的AES加密实践:正确使用初始化向量  千牛数据看板网页版_千牛数据看板网页版访问方法 

搜索