使用自定义比较规则可灵活控制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函数进行自定义排序,关键在于提供一个自定义的比较规则。这个规则可以通过函数指针、仿函数(函数对象)或Lambda表达式来实现。默认情况下,sort按照元素的“小于”关系升序排列,但通过自定义比较函数,可以灵活控制排序逻辑。1. 使用函数指针定义比较规则
可以编写一个返回
示例:按整数降序排列bool类型的函数,接收两个参数,当第一个参数应排在第二个之前时返回true。
#include#include using namespace std; bool cmp(int a, int b) { return a > b; // 降序:a排在b前当a更大 } int main() { vector 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(); } }; vectorwords = {"hi", "hello", "ok", "yes"}; sort(words.begin(), words.end(), CmpByLength()); // 结果:{"hi", "ok", "yes", "hello"} 这种方式在STL中很常见,编译器通常能更好优化仿函数。
立即学习“C++免费学习笔记(深入)”;
3. 使用Lambda表达式(推荐)
C++11起支持Lambda,适合简单、局部的比较逻辑,写法简洁。
示例:对pair按第二关键字升序
vector> 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可以应对各种排序需求。
0
0
相关文章
c++如何用SWIG生成多语言接口 c++自动化绑定【教程】
Golang在并发编程中如何避免竞态条件 详解sync包与互斥锁机制
结构体与JSON如何互相转换 序列化与反序列化实现方法
如何在VSCode Dev Containers中配置Golang 详解容器化开发环境的搭建流程
Golang的闭包函数有哪些使用场景 分析变量捕获的注意事项
相关标签:
本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门AI工具
相关专题
在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。
312
2023.08.02
java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。
1435
2023.10.24
Go语言中的运算符有:1、加法运算符;2、减法运算符;3、乘法运算符;4、除法运算符;5、取余运算符;6、比较运算符;7、位运算符;8、按位与运算符;9、按位或运算符;10、按位异或运算符等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。
223
2024.02.23
if的意思是“如果”的条件。它是一个用于引导条件语句的关键词,用于根据特定条件的真假情况来执行不同的代码块。本专题提供if什么意思的相关文章,供大家免费阅读。
713
2023.08.22
sort排序函数的用法:1、对列表进行排序,默认情况下,sort函数按升序排序,因此最终输出的结果是按从小到大的顺序排列的;2、对元组进行排序,默认情况下,sort函数按元素的大小进行排序,因此最终输出的结果是按从小到大的顺序排列的;3、对字典进行排序,由于字典是无序的,因此排序后的结果仍然是原来的字典,使用一个lambda表达式作为key参数的值,用于指定排序的依据。
379
2023.09.04
const是关键字,可以用于声明常量、函数参数中的const修饰符、const修饰函数返回值、const修饰指针。详细介绍:1、声明常量,const关键字可用于声明常量,常量的值在程序运行期间不可修改,常量可以是基本数据类型,如整数、浮点数、字符等,也可是自定义的数据类型;2、函数参数中的const修饰符,const关键字可用于函数的参数中,表示该参数在函数内部不可修改等等。
519
2023.09.20
js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。
248
2023.08.03
热门下载
相关下载
精品课程
共32课时 | 3.2万人学习
共10课时 | 0.8万人学习
共8课时 | 0.4万人学习
最新文章





