priority_queue优先队列容器
priority_queue优先队列容器
-
priority_queue优先队列容器与队列一样,只能从队尾插入元素,从队首删除元素。
-
但它有一个特性,就是队列中最大的元素总是位于队首,所以出队时,并非按先进先出的原则进行,而是将当前队列中最大的元素出队。这点类似于给队列里的元素进行了由大到小的顺序排序。
-
元素的比较规则默认为按元素的值由大到小排序
-
当然,可以重载“<”操作符来重新定义比较规则。
声明头文件包含语句“#include <queue>”
使用
基本使用
优先队列包含入队push()(插入元素)、出队pop()(删除元素)、读取队首元素top()、**判断队列是否为空empty()和读取队列元素数量size()**等方法。
#include<queue>
#include<iostream>
using namespace std;
int main(){
//定义优先队列
priority_queue<int> pq;
//入队,插入元素
pq.push(1);
pq.push(2);
pq.push(3);
//返回队列中元素的数目
cout<<pq.size()<<endl;
//所有元素出队,删除所有元素
while(!pq.empty()){
//读取当前队首元素
cout<<pq.top()<<endl;
//出队,删除队首元素
pq.pop();
}
cout<<endl;
return 0;
}
重载“<”操作符来定义优先级
如果优先队列的元素类型是结构体,可以通过在结构体中重载“<”操作符的方法来修改优先队列的优先性。
//定义结构体
struct info{
string name;
float score;
//重载< 操作符,指定优先级规则(排序规则)
bool operator < (const info & a)const{
//按从小到大排序(原本是< ,现在的功能是>)
return score > a.score;
}
};
// priority_queue<info> pq;
重载“()”操作符来定义优先级
如果优先队列的元素不是结构体类型,则可以通过重载“()”操作符的方式来定义优先级。
当然,元素是结构体类型,也可以通过重载“()”操作符的方式来定义优先级,而不是一定要在结构体内重载“<”操作符才行。
扫描二维码关注公众号,回复: 14305928 查看本文章![]()
//重载()
struct myComp{
bool operator () (const int &a,const int& b){
//由小到大
return a>b;
}
};
//定义优先队列,显式说明内部结构是vector
//priority_queue<int,vector<int>,myComp> pq;