新闻中心
C++如何使用自定义比较函数_C++ sort算法与仿函数struct用法
答案:C++中sort默认升序,可通过函数指针、仿函数或lambda实现自定义排序。①函数指针需全局或静态函数,如降序比较;②仿函数重载operator(),可保存状态且支持内联优化,适用于复杂逻辑;③lambda表达式(C++11起)更简洁,适合简单排序规则,如按姓名升序或成绩降序。三种方式均作为第三个参数传入sort。

在C++中,sort 算法默认对元素进行升序排列,但很多时候我们需要按照特定规则排序,比如降序、按绝对值排序、自定义对象比较等。这时就需要使用自定义比较函数或仿函数(functor)。下面详细介绍这两种方法的用法。
使用函数指针作为比较函数
你可以定义一个普通函数,接收两个参数,返回是否第一个应排在第二个之前(即“小于”关系)。
bool compare(int a, int b) { return a > b; // 降序排列 } int main() { std::vectorint> vec = {5, 2, 8, 1}; std::sort(vec.begin(), vec.end(), compare); // 结果:8 5 2 1 return 0; }注意:这个函数必须是全局函数或静态函数,不能是普通成员函数(除非配合绑定)。
使用仿函数 struct 实现比较逻辑
仿函数是重载了 operator() 的类或结构体。它比函数指针更灵活,支持状态保存和内联优化。
struct CompareByAbs { bool operator()(int a, int b) const { return abs(a) // 按绝对值升序 } }; int main() { std::vectorint> vec = {-3, 1, -2, 4}; std::sort(vec.begin(), vec.end(), CompareByAbs()); // 结果:1, -2, -3, 4(绝对值从小到大) return 0; }这里 CompareByAbs() 是构造一个临时对象传给 sort,sort 内部会调用它的 operator() 进行比较。
对自定义类型使用仿函数排序
假设你有一个表示学生的结构体,想按成绩排序:
SCISPACE
AI论文研究助手,探索和解释论文的平台
65
查看详情
struct Student {
std::string name;
int score;
};
struct SortByScore {
bool operator()(Student a, Student b) const {
return a.score > b.score; // 成绩从高到低
}
};
int main() {
std::vector仿函数可以访问结构体的 public 成员,实现灵活的排序逻辑。
Lambda 表达式:更简洁的替代方式(C++11起)
对于简单逻辑,lambda 更直观:
std::sort(vec.begin(), vec.end(), [](Student a, Student b) { return a.name //
按姓名字典序
});
lambda 本质上是编译器生成的仿函数,写起来更紧凑。
基本上就这些。掌握函数指针、仿函数 struct 和 lambda,就能灵活控制 sort 的行为。仿函数适合复杂或复用场景,lambda 适合简单匿名逻辑。
以上就是C++如何使用自定义比较函数_C++ sort算法与仿函数struct用法的详细内容,更多请关注其它相关文章!
# 就能
# 宜兴企业网站建设费用
# 微信营销转发推广软件
# 学校网站网站建设
# 远象建设 网站
# 房开企业营销推广费
# 通化网站优化费用标准文件
# 义乌关键词排名项目
# 江夏seo优化多少钱
# 食品网站优化调研报告
# SEO是否还要考核流量
# 数独
# ai
# 第一个
# 你可以
# 如何实现
# 如何用
# 如何使用
# 降序
# 升序
# 自定义
# 排列
# c++
相关栏目:
【
科技资讯46185 】
【
网络学院92790 】
相关推荐:
Android Studio计算器C键功能异常排查与修复教程
拷贝漫画电脑版官网入口 拷贝漫画(PC版)在线直达
Go语言中Map值调用指针接收器方法的限制与应对
高德地图总提示网络异常怎么办 高德地图离线导航设置与网络排查方法
厨房不锈钢水槽发黑生锈怎么处理_水槽用可乐+锡纸2分钟抛亮如新
Bilibili动漫最新防封地址发布-Bilibili动漫2025年最稳正版入口推荐
俄罗斯Yandex免登录入口_Yandex搜索引擎官网一键直达
CSS布局中意外空白:解决padding-top导致的顶部间距问题
谷歌google账号注册详细步骤 谷歌账号注册官方教程
c++中的std::basic_string的SSO优化_c++短字符串优化深度解析
在Typer应用中优雅地处理和重组任意命令行参数
我的世界官方游戏入口 我的世界官网平台直达链接
深入理解J*a链表中的IPosition接口与使用
python3时间如何用calendar输出?
谷歌浏览器浏览体验优化_谷歌浏览器新版直连永久可用提示
零跑汽车11月交付量达70327台 实现连续9个月正增长
使用 Pandas 高效处理 .dat 文件:数据清洗与数值计算实战
PS5 Pro有点优势但不多! 《燕云十六声》PS5平台与PC性能画面对比
C++ explicit关键字防止隐式转换_C++构造函数安全规范
蛙漫安全无毒 官方认证的绿色入口
向日葵客户端怎么进行远程CentOS控制_向日葵客户端远程CentOS控制操作教程
AO3中文官网链接_AO3网页版稳定镜像站
Win11网速慢怎么解决 Win11网络设置优化解除限速
神庙逃亡小游戏在线玩 神庙逃亡小游戏入口
c++如何使用折叠表达式(Fold Expressions)_c++17可变参数模板新技巧
C++ vector二维数组定义_C++ vector of vector用法
生成rdflib自定义SPARQL函数:参数匹配与实践指南
SteamMachine定价或为699美元 大家想入手吗?
Django模型中自动计算可用余额的实现方法
抓大鹅解压小游戏 抓大鹅摸鱼解压入口
J*aScript中安全有效地处理localStorage字符串数据
Go语言中高效处理x-www-form-urlencoded表单数据
抖音商城签到领现金是真的吗_抖音商城签到奖励与提现说明
QQ邮箱登录官网首页 腾讯QQ邮箱网页入口
sublime如何配置Go语言开发环境_sublime搭建Golang编译运行系统
Golang如何实现简单的Web表单_Golang表单提交与验证处理方法
外媒分析《GTA6》定价:卖100美元可以但真没必要!
韩剧圈正版入口页面_韩剧圈官网登录链接
三星ZFold5多任务卡顿_Samsung ZFold5流畅度提升
如何创建独立于主系统的J*a运行环境_隔离式环境搭建策略
使用Pandas转换并合并DataFrame:多列映射至统一结构
理解J*aScript Promise的微任务队列与执行顺序
夸克浏览器网页版最新地址 夸克浏览器官方入口合集
2306选座时如何选靠窗位置_12306选座靠窗座位查看方法解析
Golang如何测试channel通信行为_Golang channel通信测试与分析方法
快手极速版在线观看 官方网页版登录地址
三星GalaxyZFold5怎样在相册制作折叠屏分镜_iPhone三星GalaxyZFold5相册制作折叠屏分镜【创意编辑】
俄罗斯Yandex搜索引擎入口_Yandex官网免登录一键访问
自定义Bag-of-Words实现:处理带负号的词汇权重
PDF怎么合并PDF并保持格式_PDF合并文件保持排版教程


2025-12-02
浏览次数:次
返回列表