priority_queue 作为成员函数并使用lambda表达式排序
#include <iostream>
#include <queue>
#include <vector>
#include <functional>
using namespace std;
struct Student
{
Student(int age):age(age) {}
int age=0;
};
function<bool(const Student&,const Student&)> func=[](const Student& x,const Student y)->bool{return x.age>y.age;};
class TestClass
{
public:
TestClass() {
pq=std::priority_queue<Student,std::vector<Student>,function<bool(const Student&,const Student&)>>(func);
}
std::priority_queue<Student,std::vector<Student>,function<bool(const Student&,const Student&)>> pq;//(func);
};
直接使用lambda表达式
#include <iostream>
#include <queue>
#include <vector>
#include <functional>
using namespace std;
struct Student
{
Student(int age):age(age) {}
int age=0;
};
//function<bool(const Student&,const Student&)> func=[](const Student& x,const Student y)->bool{return x.age>y.age;};
class TestClass
{
public:
TestClass() {
// pq=std::priority_queue<Student,std::vector<Student>,function<bool(const Student&,const Student&)>>(func);
pq=std::priority_queue<Student,std::vector<Student>,function<bool(const Student&,const Student&)>>([](const Student& x,const Student y)->bool{return x.age>y.age;});
}
std::priority_queue<Student,std::vector<Student>,function<bool(const Student&,const Student&)>> pq;//(func);
};
队列中存放智能指针
#include <iostream>
#include <queue>
#include <vector>
#include <functional>
#include <memory>
using namespace std;
struct Student
{
Student(int age):age(age) {}
int age=0;
};
//function<bool(const Student&,const Student&)> func=[](const Student& x,const Student y)->bool{return x.age>y.age;};
class TestClass
{
public:
TestClass() {
// pq=std::priority_queue<Student,std::vector<Student>,function<bool(const Student&,const Student&)>>(func);
// pq=std::priority_queue<Student,std::vector<Student>,function<bool(const Student&,const Student&)>>([](const Student& x,const Student y)->bool{return x.age>y.age;});
pq=std::priority_queue<shared_ptr<Student>,std::vector<shared_ptr<Student>>,function<bool(shared_ptr<Student>,shared_ptr<Student>)>>([](shared_ptr<Student> x,shared_ptr<Student> y)->bool{return x->age>y->age;});
}
// std::priority_queue<Student,std::vector<Student>,function<bool(const Student&,const Student&)>> pq;//(func);
// std::priority_queue<Student,std::vector<Student>,function<bool(const Student&,const Student&)>> pq;//(func);
std::priority_queue<shared_ptr<Student>,std::vector<shared_ptr<Student>>,function<bool(shared_ptr<Student>,shared_ptr<Student>)>> pq;//(func);
};
int main (){
TestClass test;
for(int i=0;i<10;i++){
test.pq.push(make_shared<Student>(i));
}
while (!test.pq.empty()) {
auto top = test.pq.top();
test.pq.pop();
cout<<"Top:"<<top->age<<endl;
}
cout << "Hello World!" << endl;
return 0;
}

这篇博客展示了如何在C++中利用lambda表达式为优先级队列定义自定义排序规则。首先,创建了一个`Student`结构体,然后在`TestClass`中使用lambda表达式直接初始化`priority_queue`,使其按年龄降序排列。此外,还演示了当队列中存储`shared_ptr<Student>`时如何应用相同的概念。在主函数中,通过向队列中添加学生对象并弹出最小年龄的学生,展示了优先级队列的运作过程。
628

被折叠的 条评论
为什么被折叠?



