优先队列

priority_queue(优先队列)
优先队列和队列不同,队列中元素按照进入的先后顺序出队,而优先队列中元素按照优先级出队。优先队列用二叉堆实现。
头文件:priority_queue存在于<queue>,vector存在于<vector>,greater和less存在于<functional>
1.定义一个优先队列
最小值优先出队:priority _queue<int ,vector<int>,greater<int>> q;
最大值优先出队 : priority_queue<int,vector<int>,less<int>> q;
定义队列时要注意,后面两个“>"间有一个空格。假若没有空格,编译器会将其误认为”>>“运算符而无法正确编译。
2.q.push(a):使a入队。
3.q.top() : 返回优先级最高的元素,但不会移除元素。
4.q.pop() : 移除优先级最高的元素。该函数无返回值。
5.q.empty():判断队列是否为空。
6.q.size() : 返回队列中已有元素的个数。

如果需要使用自己的结构体,你需要重载复制构造函数和“>”(“<”)运算符。使用 less(最大值先出队),
则需要重载“<”运算符;使用 greater(最小值先出队),则需要重载“>”运算符。例如:

struct MyStruct
{
int v;
MyStruct(int i):v(i) {}
bool operator < (const MyStruct & b) const {return v < b.v;}
};
priority_queue < MyStruct,vector<MyStruct>,less<MyStruct> > q;

原文地址:https://www.cnblogs.com/skyakioi/p/13289983.html