lambda表达式配合std::sort可简洁实现自定义排序:1. 基本语法为capture { body },用于升序排序如[](int a, int b) { return a
在C++中,使用lambda表达式进行排序非常方便,尤其配合
std::sort函数时,可以快速定义自定义排序规则。不需要额外写比较函数或仿函数,代码更简洁清晰。1. 基本语法:lambda作为sort的比较函数
lambda表达式的通用格式为:
[capture](parameters) -> return_type { body }
在排序中,通常省略返回类型,由编译器自动推导。例如,对整数数组按升序排列:
#include#include std::vector nums = {5, 2, 8, 1, 9}; std::sort(nums.begin(), nums.end(), [](int a, int b) { return a < b; }); 这里lambda返回
true表示a应排在b前面。2. 按结构体或类成员排序
当需要根据对象的某个字段排序时,lambda能直接访问成员变量。
立即学习“C++免费学习笔记(深入)”;
struct Person { std::string name; int age; };std::vector
people = {{"Alice", 30}, {"Bob", 25}, {"Charlie", 35}}; // 按年龄升序 std::sort(people.begin(), people.end(), [](const Person& a, const Person& b) { return a.age < b.age; });
// 按名字字典序降序 std::sort(people.begin(), people.end(), [](const Person& a, const Person& b) { return a.name > b.name; });
3. 捕获外部变量实现动态排序
lambda可以捕获局部变量,实现灵活排序策略。
std::string sortBy = "age"; // 可动态改变std::sort(people.begin(), people.end(), [sortBy](const Person& a, const Person& b) { if (sortBy == "name") { return a.name < b.name; } else { return a.age < b.age; } });
注意:若捕获的是值类型,无法修改原变量;如需修改,可使用引用捕获
[&],但要确保变量生命周期有效。4. 使用技巧与注意事项
- 参数建议用const引用,避免拷贝大对象:
const T& a, const T& b- 确保比较逻辑满足“严格弱序”:不能有循环依赖,相同元素返回false
- 可结合
std::tie实现多字段排序:std::sort(people.begin(), people.end(), [](const Person& a, const Person& b) { return std::tie(a.age, a.name) < std::tie(b.age, b.name); });这表示先按年龄升序,年龄相同时按名字升序。
基本上就这些。lambda让C++排序更直观高效,掌握好捕获方式和比较逻辑,就能应对大多数场景。不复杂但容易忽略细节,比如别把
写成,否则可能导致未定义行为。
0
0
相关文章
为什么Golang的函数参数都是值传递 分析指针与引用传递的区别
如何为C++搭建区块链节点开发环境 Hyperledger Fabric集成
Golang的包管理机制如何运作 介绍go mod的依赖管理方式
为什么Golang要禁止循环引用 讲解编译器的包依赖检查规则
Golang的select语句如何实现多路复用 剖析非阻塞IO处理机制
本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门AI工具
相关专题
sort排序函数的用法:1、对列表进行排序,默认情况下,sort函数按升序排序,因此最终输出的结果是按从小到大的顺序排列的;2、对元组进行排序,默认情况下,sort函数按元素的大小进行排序,因此最终输出的结果是按从小到大的顺序排列的;3、对字典进行排序,由于字典是无序的,因此排序后的结果仍然是原来的字典,使用一个lambda表达式作为key参数的值,用于指定排序的依据。
377
2023.09.04
const是关键字,可以用于声明常量、函数参数中的const修饰符、const修饰函数返回值、const修饰指针。详细介绍:1、声明常量,const关键字可用于声明常量,常量的值在程序运行期间不可修改,常量可以是基本数据类型,如整数、浮点数、字符等,也可是自定义的数据类型;2、函数参数中的const修饰符,const关键字可用于函数的参数中,表示该参数在函数内部不可修改等等。
516
2023.09.20
在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。
311
2023.08.02
int占4个字节,意味着一个int变量可以存储范围在-2,147,483,648到2,147,483,647之间的整数值,在某些情况下也可能是2个字节或8个字节,int是一种常用的数据类型,用于表示整数,需要根据具体情况选择合适的数据类型,以确保程序的正确性和性能。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。
510
2024.08.29
苹果官网直接访问入口是https://www.apple.com/cn/,该页面具备0.8秒首屏渲染、HTTP/3与Brotli加速、WebP+AVIF双格式图片、免登录浏览全参数等特性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。
10
2025.12.24
热门下载
相关下载
精品课程
共32课时 | 2.9万人学习
共10课时 | 0.8万人学习
共8课时 | 0.4万人学习
最新文章







