优先队列这个名字,顾名思义就是在队列中的元素是有优先级的。队列首部元素是队列中优先级最高的元素。
对于整形,实型,字符型等等是一样的:
///整形优先队列,按照从小到大排序:测试可输入任意五个整数。
#include <iostream>
#include <queue>
using namespace std;
int main()
{
int i,a;
priority_queue<int,vector<int>,greater<int> >qu;
for(i=0;i<5;i++)
{
cin >>a;
qu.push(a);
}
for(i=0;i<5;i++)
{
cout << qu.top()<<endl;
qu.pop();
}
}
在结构体中,我们可以这样写:
///整形优先队列,按照从小到大排序:测试可输入任意五个坐标,按x的大小排序,如果x相
///等则按y从大到小排序,这是重新定义“<”实现的。
#include <iostream>
#include <queue>
using namespace std;
struct num
{
int x,y;
friend bo l operator < (num n1,num n2)
{
if(n1.x==n2.x)
{
return n1.y<n2.y;
}
else
{
return n2.x<n1.x;
}
}
};
int main()
{
priority_queue <num,vector<num>,greater<num> >qu;
int i;
num a;
for(i=0;i<5;i++)
{
cin >>a.x>>a.y;
qu.push(a);
}
for(i=0;i<5;i++)
{
cout << qu.top().x<<' '<< qu.top().y<<endl;
qu.pop();
}
return 0;
}
强调的是如果你只对结构体重定义了“<”,那么你只能用比较函数greater,less是用不了的。
当然相反的,如果你只对结构体重定义了">",那么就相反了。