讲师中心 微信公众号
AI工具推荐 视频效率加速

C++中std::sort如何实现降序排列_C++使用greater函数对象参数【基础】

落涛大大_2943

落涛大大_2943

发布时间:2026-02-06 15:44:14

|

629人浏览过

|

来源于php中文网

原创

std::sort 传 std::greater<int>() 实现降序,需包含 <functional> 头文件;自定义类型需重载 operator> 或用 lambda;反向迭代器配 std::less() 是常见错误。

c++中std::sort如何实现降序排列_c++使用greater函数对象参数【基础】

std::sort 传 std::greater<int>()</int> 实现降序

默认 std::sort 是升序,要降序,最直接的方式就是显式传入比较器。对内置类型(如 intdouble),用 std::greater<int>()</int> 最简洁:

std::vector<int> v = {3, 1, 4, 1, 5};
std::sort(v.begin(), v.end(), std::greater<int>());

执行后 v 变为 {5, 4, 3, 1, 1}。注意:必须带模板参数(如 <int></int>),不能只写 std::greater()(C++17 起虽支持类模板参数推导,但很多旧编译器或 STL 实现仍要求显式指定)。

自定义类型降序需重载 operator> 或传 lambda

如果排序的是自定义结构体或类,std::greater<t>()</t> 要求 T 支持 operator>。否则编译失败,错误信息类似:invalid operands to binary expression ('MyStruct' and 'MyStruct')

两种稳妥做法:

立即学习C++免费学习笔记(深入)”;

  • 在类内定义 bool operator>(const MyStruct& rhs) const
  • 不改类型定义,直接用 lambda:std::sort(v.begin(), v.end(), [](const auto& a, const auto& b) { return a.value > b.value; });

lambda 更灵活,尤其当需要按多个字段、或临时改变排序逻辑时;而 operator> 更适合该类型“天然”有明确大于语义的场景。

C++ 算法竞赛自动化测试数据生成与校验框架
C++ 算法竞赛自动化测试数据生成与校验框架

根据原题生成新题面、验证器及完整测试数据,自动套用 testlib 模板,用于用户要求生成测试数据时。

下载

为什么不用 std::less<int>()</int> 配合反向迭代器?

有人尝试写 std::sort(v.rbegin(), v.rend(), std::less<int>())</int>,以为能降序——这其实仍是升序,只是把容器“倒着看”了。结果是原数组被按升序填进逆序位置,最终效果混乱,不是真正降序。

正确做法只有两种:

  • 保持正向迭代器 + std::greater(推荐,语义清晰)
  • 保持正向迭代器 + 自定义比较逻辑(如 lambda 返回 a > b

用反向迭代器配合 std::less 是常见误解,调试时容易发现结果不符合预期。

性能与头文件依赖

std::greater 定义在 <functional> 头文件中,漏引会导致编译错误:'greater' is not a member of 'std'。它本身是空对象,无运行时开销,和手写 return a > b 的 lambda 性能一致。

若项目已用 <algorithm><vector>,别忘了额外加一行:#include <functional>。这点在快速写 demo 时特别容易忽略。

降序逻辑本身不增加复杂度,但比较器类型一旦写错(比如模板参数不匹配、或用了未定义 operator> 的类型),编译器报错信息往往很长且指向不明确——建议先用 lambda 快速验证逻辑,再换成 std::greater 提升可读性。

热门AI工具

更多
豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

切问学术

切问学术是一款AI论文写作工具,复旦大学NLP团队推出的AI学术智能体。

二狗PPT
二狗PPT Hot

一款AI演示文稿工具,主要用于专为中式职场打造的AI PPT生成工具,适合需要提升相关任务效率的用户。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

Atoms
Atoms Hot

Atoms是一款AI智能体工具,第一支自动构建真实业务的 AI 团队。

火山引擎

火山引擎是一款面向企业的云计算与AI服务平台。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

蛙蛙写作

一款AI论文写作工具,主要用于超级AI智能写作助手,适合需要提升相关任务效率的用户。

墨刀AI
墨刀AI Hot

一款AI图像与设计工具,主要用于产品经理的专属智能体,适合需要提升相关任务效率的用户。

相关专题

更多
Sass和less的区别
Sass和less的区别

Sass和less的区别有语法差异、变量和混合器的定义方式、导入方式、运算符的支持、扩展性等。本专题为大家提供Sass和less相关的文章、下载、课程内容,供大家免费下载体验。

2127

2023.10.12

sort排序函数用法
sort排序函数用法

sort排序函数的用法:1、对列表进行排序,默认情况下,sort函数按升序排序,因此最终输出的结果是按从小到大的顺序排列的;2、对元组进行排序,默认情况下,sort函数按元素的大小进行排序,因此最终输出的结果是按从小到大的顺序排列的;3、对字典进行排序,由于字典是无序的,因此排序后的结果仍然是原来的字典,使用一个lambda表达式作为key参数的值,用于指定排序的依据。

1098

2023.09.04

c语言const用法
c语言const用法

const是关键字,可以用于声明常量、函数参数中的const修饰符、const修饰函数返回值、const修饰指针。详细介绍:1、声明常量,const关键字可用于声明常量,常量的值在程序运行期间不可修改,常量可以是基本数据类型,如整数、浮点数、字符等,也可是自定义的数据类型;2、函数参数中的const修饰符,const关键字可用于函数的参数中,表示该参数在函数内部不可修改等等。

1898

2023.09.20

golang结构体相关大全
golang结构体相关大全

本专题整合了golang结构体相关大全,想了解更多内容,请阅读专题下面的文章。

3874

2025.06.09

golang结构体方法
golang结构体方法

本专题整合了golang结构体相关内容,请阅读专题下面的文章了解更多。

4051

2025.07.04

golang结构体相关大全
golang结构体相关大全

本专题整合了golang结构体相关大全,想了解更多内容,请阅读专题下面的文章。

3874

2025.06.09

golang结构体方法
golang结构体方法

本专题整合了golang结构体相关内容,请阅读专题下面的文章了解更多。

4051

2025.07.04

string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

5099

2023.08.02

Conan私有仓库搭建教程
Conan私有仓库搭建教程

本专题系统的讲解Conan私有仓库的搭建流程,涵盖仓库服务部署、存储目录配置、用户认证、权限划分和远程地址添加,并介绍内部C++依赖包的上传、下载及版本维护方法。

0

2026.09.22

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn