如何在C++中使用lambda表达式定义自定义排序?
时间: 2025-01-05 21:39:48 浏览: 10
在C++中,你可以使用lambda表达式来定义自定义排序规则,特别是在`std::sort`等标准库算法接受一个比较函数的地方。lambda表达式让你能够轻松地创建一个匿名的、可传递的函数对象,用于指定元素之间的比较。
以下是一个简单的例子,假设我们有一个vector包含Person对象,我们想根据他们的年龄进行升序排序:
```cpp
#include <iostream>
#include <vector>
#include <algorithm>
struct Person {
std::string name;
int age;
bool operator<(const Person& other) const {
return age < other.age; // 默认按照age比较
}
};
int main() {
std::vector<Person> people = {{"Alice", 25}, {"Bob", 20}, {"Charlie", 30}};
// 使用lambda表达式定义自定义排序
std::sort(people.begin(), people.end(), [](const Person& a, const Person& b) {
return a.age < b.age;
});
for (const auto& person : people) {
std::cout << person.name << " (" << person.age << ")\n";
}
return 0;
}
```
在这个例子中,lambda表达式`[&](const Person& a, const Person& b) -> bool { return a.age < b.age; }`就是一个比较函数,它接收两个Person对象作为参数并返回一个布尔值,表示第一个对象是否应该排在第二个对象之前。
如果你想按名字而不是年龄排序,只需稍微调整lambda表达式即可:
```cpp
std::sort(people.begin(), people.end(), [](const Person& a, const Person& b) {
return a.name < b.name;
});
```
阅读全文