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;
}