1.priority_queue
1.1 优先级队列的定义
//不写后面两个参数默认为vector,less
priority_queue<int> pq1;
//建立一个优先级队列(大堆),数据类型是int,利用vector容器实现,less(降序)实现
priority_queue<int, vector<int>, less<int>> pq2;
//建立一个优先级队列(小堆),数据类型是int,利用vector容器实现,greater(降序)实现
priority_queue<int, vector<int>, greater<int>> pq3;
1.2 常见接口函数
top() :返回元素中第一个元素的引用(优先级最高的元素都会被放到顶部,既第一个元素).
push():插入一个元素,并重新维护堆,无返回值.
pop() :删除优先级最高的元素,并重新维护堆无返回值
size() :返回容器中有效元素的数量,返回队列的大小
empty() :检测容器是否为空.返回“true”或者“false”.
1.3 自定义类型的优先队列
#include<iostream>
#include<queue>
using namespace std;
const int N=1e6+10;
struct goods{
double w;
double v;
}good[N];
bool operator<(const goods &a,const goods &b){
return a.v/a.w<b.v/b.w;
}
int main(){
priority_queue<goods> q;
for(int i=0;i<5;i++){
cin>>good[i].w>>good[i].v;
q.push(good[i]);
}
while(!q.empty()){
cout<<q.top().w<<" "<<q.top().v<<endl;
q.pop();
}
return 0;
}