头文件:
<queue>
常用操作:
push()入队新元素
pop()优先级最大的元素出队
top()取得当前优先级最大的元素
size()获得队列中元素的个数
empty()判断队列是否为空
例程:
#include<cstdio>
#include<algorithm>
#include<queue>
#include<vector>
using namespace std;
int main()
{
priority_queue<int>pq;
for(int i = 1;i <= 10;i++)
{
pq.push(i);
}
for(int i = 1;i <= 10;i++)
{
int x = pq.top();
printf("%d ",x);
pq.pop();
}
puts("");
}
运行结果:
10 9 8 7 6 5 4 3 2 1
可以看出,优先队列是默认数值越大的数优先级是越高的(浮点数也是这个原则)。
自定义优先级:
方法一(使用比较方式类):
例程:
#include<cstdio>
#include<algorithm>
#include<queue>
#include<vector>
using namespace std;
class cmp
{
public:
bool operator()(const int a,const int b)
{
return a > b;
}
};
int main()
{
priority_queue<int,vector<int>,cmp>pq;
//priority_queue<int,vector<int>,greater<int> >pq;这种写法更方便
for(int i = 1;i <= 10;i++)
{
pq.push(i);
}
for(int i = 1;i <= 10;i++)
{
int x = pq.top();
printf("%d ",x);
pq.pop();
}
puts("");
}
运行结果:
1 2 3 4 5 6 7 8 9 10
方法二(重载<运算符):
例程:
#include<cstdio>
#include<algorithm>
#include<queue>
#include<vector>
using namespace std;
struct node
{
int x,y;
bool operator < (const node& p)const
{
return x > p.x;
}
};
int main()
{
priority_queue<node>pq;
for(int i = 1;i <= 5;i++)
{
node tmp;
tmp.x = i;
tmp.y = 5-i;
pq.push(tmp);
}
for(int i = 1;i <= 5;i++)
{
node tmp = pq.top();
printf("%d %d\n",tmp.x,tmp.y);
pq.pop();
}
puts("");
}
运行结果:
1 4
2 3
3 2
4 1
5 0
。。。