优先队列
优先队列有三个参数:type, container, function。
type 为数据类型
container 为保存数据的容器
functional 为元素比较方式
container 必须是用数组实现的容器,比如 vector, deque 但不能用 list。STL里面容器默认用的是 vector. 比较方式默认用 operator< 。
priority_queue< type, container, function >;
一.大顶堆和小顶堆
大顶堆:元素从大到小排序
priority_queue<int>q;//默认大顶堆
priority_queue<int, vector<int>, less<int>>q1;//还可以这样写大顶堆
小顶堆:元素从小到大
priority_queue<int, vector<int>, greater<int>>q2;//小顶堆
二.优先队列中结构体排序
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll inf = 0x3f3f3f3f3f3f3f3f;
struct st {
int x;
int y;
st() {}
st(int a, int b) {
x = a;
y = b;
}
}p[2500];
bool operator >(const st& a, const st& b) {//结构体自定义排序,>对应优先队列中的greater,<对应优先队列中的less
return a.x > b.x;//x升序排序
}
priority_queue<st, vector<st>, greater<st>>q3;//结构体排序
int main() {
p[0].x = 1, p[0].y = 2;
p[1].x = 2, p[1].y = 4;
p[2].x = 3, p[2].y = 6;
q3.push(p[0]);
q3.push(p[1]);
q3.push(p[2]);
for (int i = 0; i < 3; i++) {
int x = q3.top().y;
cout << x << endl;
q3.pop();
}
}