优先队列是一种极其特殊的队列,他与标准的队列使用线性结构进行计算不同,优先队列的底层是以散列的状态(非线性)表现的,他与标准的队列有如下的区别,标准的队列遵从严格的先进先出,优先队列并不遵从标准的先进先出,而是对每一个数据赋予一个权值,根据当前队列权值的状态进行排序,永远使得权值最大(或最小)的排在队列的最前面。
头文件:#include<queue>
初始化:
priority_queue<T> //直接输入元素则使用默认容器和比较函数,默认是大的在队头
priority_queue<T, Container, Compare>
其中container是数组类型的容器,不能是list,能是vector,compare是自定义比较函数,但是这个比较函数是用结构体的运算符重载完成
struct cmp
{ //这个比较要用结构体表示
booloperator()(int&a, int&b) const
{
returna > b;//把最小的放到队头
}
};
常用接口:
size();//队列中元素个数
push(1);//入队
pop();//出队
top();//访问队头元素
empty();//判空
代码:
#include<iostream>
#include<queue>
using namespace std;
struct cmp{//从小到大输出
bool operator()(int &a,int &b)const{
return a>b;
}
};
int main(){
priority_queue<int,vector<int>,cmp> q;
//priority_queue<int> q;//默认是从大到小输出
int m;
for(int i=0;i<5;i++){
cin>>m;
q.push(m);
}
cout<<q.size()<<endl;
int i=1;
while(!q.empty()){
cout<<i++<<" "<<q.top()<<endl;
q.pop();
}
return 0;
}
结果: