c++lambda表达式自定义排序
时间: 2025-01-07 11:00:00 浏览: 7
### C++ 中使用 Lambda 表达式实现自定义排序
在C++中,`std::sort()` 函数允许传递第三个参数作为比较器来指定元素之间的顺序关系。Lambda表达式可以方便地用于创建这种比较器。
下面是一个具体的例子,展示如何利用lambda表达式来进行整数数组的降序排列:
```cpp
#include <iostream>
#include <vector>
#include <algorithm>
int main() {
std::vector<int> numbers = {5, 3, 8, 7, 1};
// 使用 lambda 表达式进行降序排序
std::sort(numbers.begin(), numbers.end(), [](const int &lhs, const int &rhs){
return lhs > rhs;
});
for (auto num : numbers) {
std::cout << num << " ";
}
return 0;
}
```
这段代码首先导入必要的头文件并声明了一个包含若干整数值的向量 `numbers` 。接着调用了 `std::sort()` ,其中最后一个参数是指定了两个元素之间大小关系的lambda表达式[^1]。此lambda接受两个常量引用类型的输入,并返回布尔值表示前者是否应排在后者之前。最后遍历已排序后的容器打印其内容。
对于更复杂的数据结构比如对象集合,则可以通过访问成员变量的方式来自定义排序规则。例如按字符串长度升序排列一组字符串:
```cpp
#include <string>
#include <vector>
#include <algorithm>
struct Person {
std::string name;
int age;
Person(std::string n, int a):name(n),age(a){}
};
bool operator<(const Person& p1,const Person&p2){
return p1.age<p2.age;
}
int main(){
std::vector<Person> people={
{"Alice",30},{"Bob",24},{"Charlie",29}
};
// 按年龄从小到大排序
std::sort(people.begin(), people.end());
// 或者按照姓名字母顺序排序
std::sort(people.begin(), people.end(),
[](const Person &p1, const Person &p2)->bool{
return p1.name < p2.name;
}
);
return 0;
}
```
在这个例子中,除了基本数据类型外还展示了如何针对类实例应用lambda表达式的自定义排序逻辑。这里先实现了重载小于运算符以便可以直接对 `Person` 对象使用标准库算法;之后又给出了另一种基于名字字段而非内置操作符的方法[^2]。
阅读全文