优先队列自定义排序 lambda表达式
时间: 2023-10-19 16:34:19 浏览: 131
优先队列是一种数据结构,可以根据元素的优先级来进行插入和删除操作。在C++中,可以使用自定义排序和lambda表达式来实现对优先队列的排序。
下面是一个示例代码,演示了如何使用lambda表达式自定义排序规则来创建一个具有自定义排序功能的优先队列:
```cpp
#include <iostream>
#include <queue>
using namespace std;
struct Person {
string name;
int age;
// 自定义排序规则
bool operator<(const Person& other) const {
// 根据年龄进行降序排序
return age < other.age;
}
};
int main() {
// 创建一个优先队列,使用lambda表达式作为自定义排序规则
priority_queue<Person, vector<Person>, function<bool(const Person&, const Person&)>> pq([](const Person& p1, const Person& p2) {
// 根据姓名长度进行升序排序
return p1.name.length() > p2.name.length();
});
// 添加元素到优先队列
pq.push({"Alice", 25});
pq.push({"Bob", 30});
pq.push({"Charlie", 20});
// 输出排序后的结果
while (!pq.empty()) {
Person p = pq.top();
pq.pop();
cout << "Name: " << p.name << ", Age: " << p.age << endl;
}
return 0;
}
```
在这个示例中,我们定义了一个名为Person的结构体,其中包含了姓名和年龄两个成员变量。我们通过在结构体中重载小于运算符来定义排序规则,即根据年龄进行降序排序。
在主函数中,我们创建了一个优先队列(priority_queue)对象pq,并使用lambda表达式作为自定义排序规则。lambda表达式接受两个Person对象作为参数,并返回一个bool值,表示它们的相对顺序。
然后,我们向优先队列中添加了几个Person对象,并通过循环不断从队列中取出元素,直到队列为空。输出结果按照我们定义的排序规则进行了排序。
希望这个示例对你有帮助!如果你还有其他问题,请随时提问。
阅读全文