默认情况下从大到小输出
#include <iostream>
#include <queue>
using namespace std;
int main()
{
priority_queue<int> q; //等价priority_queue<int,vector<int>,less<int> > q;
q.push(2);
q.push(6);
q.push(1);
int i;
for(i=0;i<3;i++)
{
cout<<q.top()<<endl;
q.pop();
}
return 0;
}
输出6,2,1;
如果实现int,top最小的则为
#include <iostream>
#include <queue>
using namespace std;
int main()
{
priority_queue<int,vector<int>,greater<int> > q;
q.push(2);
q.push(6);
q.push(1);
int i;
for(i=0;i<3;i++)
{
cout<<q.top()<<endl;
q.pop();
}
return 0;
}
输出1,2,6;
如果是结构体或者类,则必须要进行重载运算符 可以重载<或():
重载<:
#include <iostream>
#include <queue>
using namespace std;
struct node
{
int a;
friend bool operator<(const node &lhs,const node &rhs)
{
return lhs.a<rhs.a; //top弹出最大的。。。若return lhs.a>rh.a 则弹出最小的
}
};
int main()
{
priority_queue<node> q; //注意定义时只有node
node s;
s.a=3;
q.push(s);
s.a=6;
q.push(s);
s.a=1;
q.push(s);
int i;
for(i=0;i<3;i++)
{
cout<<q.top().a<<endl;
q.pop();
}
return 0;
}
重载():
#include <iostream>
#include <queue>
using namespace std;
struct node
{
int a;
};
struct cmp
{
bool operator()(const node&lhs,const node&rhs)
{
return lhs.a<rhs.a; //top弹出最大的, 若为lhs.a>rhs.a弹出最小的
}
};
int main()
{
priority_queue<node,vector<node>,cmp> q;
node s;
s.a=3;
q.push(s);
s.a=6;
q.push(s);
s.a=1;
q.push(s);
int i;
for(i=0;i<3;i++)
{
cout<<q.top().a<<endl;
q.pop();
}
return 0;
}
顺便 sort()默认从小到大。