可以将Lambda表达式直接传给std::sort作为比较函数,无需额外定义函数或仿函数;支持升序、降序及按自定义类型字段排序,但必须满足严格弱序要求。

可以用Lambda表达式直接传给 std::sort 作为比较函数,无需额外定义函数或仿函数,简洁又灵活。
基本用法:升序与降序
默认 std::sort 是升序(a ),用 Lambda 可轻松反转:
- 升序:
std::sort(v.begin(), v.end(), [](int a, int b) { return a - 降序:
std::sort(v.begin(), v.end(), [](int a, int b) { return a > b; });
按自定义类型字段排序
比如对结构体按某个成员排序,Lambda 捕获简洁明了:
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; // 按年龄升序
});
捕获外部变量(如排序依据动态变化)
用 [&] 或 [=] 捕获局部变量,实现运行时决定的排序逻辑:
立即学习“C++免费学习笔记(深入)”;
int threshold = 30;std::sort(v.begin(), v.end(), [threshold](int a, int b) {-
return (a >= threshold) = threshold); // 先放 ≥threshold 的数 - });
注意事项
Lambda 必须满足严格弱序(strict weak ordering):返回 true 表示 a 应排在 b 前面;不能对相同元素返回 true;且逻辑需自洽(如 a 和 ba
另外,参数建议用 const T& 避免拷贝,尤其对大对象或自定义类型。
基本上就这些。写得自然、不绕弯,Lambda 就是 std::sort 最常用的自定义方式。










