参考ACM程序设计
优先队列中最大的元素总是位于队首。
1、优先队列的使用方法
//4
//9 3 2 1
#include<stdio.h>
#include<iostream>
#include<string.h>
#include<queue>
using namespace std;
int main()
{
priority_queue<int> pq; //定优先队列,元素类型为整型
pq.push(1); //入队,插入新元素
pq.push(2);
pq.push(3);
pq.push(9);
cout<<pq.size()<<endl; //返回队列中元素数数目
while(pq.empty()!=true)
{
cout<<pq.top()<<" "; //读取当前队首元素
pq.pop(); //出队,删除队首元素
}
cout<<endl;
return 0;
}
2、如果优先队列的元素类型是结构体,可以通过在结构体中重载“<”来修改优先队列的优先性
//Bomi : 18.5
//Jack : 68.5
//Peti : 90
#include<stdio.h>
#include<iostream>
#include<string.h>
#include<string>
#include<queue>
using namespace std;
struct Info
{
string name;
float score;
bool operator < (const Info &a)const
{
//按score由小到大排列,如果要由大到小,使用“>”即可
return a.score<score;
}
};
int main()
{
priority_queue<Info> pq; //定优先队列,元素类型为结构体
Info info;
info.name="Jack";
info.score=68.5;
pq.push(info);
info.name="Bomi";
info.score=18.5;
pq.push(info);
info.name="Peti";
info.score=90;
pq.push(info);
while(pq.empty()!=true)
{
cout<<pq.top().name<<" : "<<pq.top().score<<endl;
pq.pop();
}
return 0;
}
3、重载()操作符来定义优先级。
//1 2 3 30
#include<stdio.h>
#include<iostream>
#include<string.h>
#include<vector>
#include<string>
#include<queue>
using namespace std;
struct mycomp
{
bool operator ()(const int &a,const int &b)
{
//由小到大采用>,如果要由大到小,则采用<
return a>b;
}
};
int main()
{
priority_queue<int,vector<int>,mycomp> pq; //定优先队列,元素类型为整型,显示说明内部结构是vector
pq.push(1);
pq.push(9);
pq.push(2);
pq.push(30);
while(pq.empty()!=true)
{
cout<<pq.top()<<" ";
pq.pop();
}
cout<<endl;
return 0;
}