优先队列priority_queue
头文件#include<queue>;
基本优先队列的形式priority_queue<int>que;
作用:对队列里的元素默认从大到小排列。
复杂一点的优先队列:priority_queue<type, container, functional>que;
type 为数据类型, container 为保存数据的容器,functional 为元素比较方式。
container 必须是用数组实现的容器,比如 vector, deque 但不能用 list.
STL里面默认用的是 vector. 比较方式默认用 operator< , 所以如果你把后面俩个参数缺省的话,优先队列就是大顶堆,队头元素最大。
重点:优先队列里比较函数的写法:
priority_queue<int, vector<int>, less<int> > q;//等价于默认,从大到小排
//greater<int> 从小到大排
2.自定义优先级:
struct cmp{
bool operator ()(const node &a, const node &b)
{
return a.value>b.value;// 按照value从小到大排列
}
};
priority_queue<node, vector<node>, cmp>que;
3.对结构体进行重载操作符:
struct node {
int x,y;
friend bool operator < (node a, node b)
{
return a.x>b.x; //x小的优先级高。
}
};
也可以:
struct node{
int x,y;
};
bool operator(const node &a,const node &b)
{
return a.x>b.x;
};
priority_queue<node>que;
bool operator < (const point &a) const //升序排列
{
return x<a.x;
}