c++STL库中的priority_queue如何使用
1、该容器需要使用的头文件:
#include <queue>

2、简单的定义方式:
priority_queue <int> g ;
这通常形成大顶堆。

3、常用方法:
priority_queue::top() 返回堆顶部的元素的值
priority_queue::push() 将一个元素压入优先队列中
priority_queue::pop() 删除优先队列第一个元素

4、代码示例:
#include <iostream>
#include <queue>
using namespace std;
void showpq(priority_queue <int> gq)
{
priority_queue <int> g = gq;
while (!g.empty())
{
cout << '\t' << g.top();
g.pop();
}
cout << '\n';
}
int main ()
{
priority_queue <int> gquiz;
gquiz.push(10);
gquiz.push(30);
gquiz.push(20);
gquiz.push(5);
gquiz.push(1);
cout << "The priority queue gquiz is : ";
showpq(gquiz);
cout << "\ngquiz.size() : " << gquiz.size();
cout << "\ngquiz.top() : " << gquiz.top();
cout << "\ngquiz.pop() : ";
gquiz.pop();
showpq(gquiz);
return 0;
}

5、输出结果:
The priority queue gquiz is : 30 20 10 5 1
gquiz.size() : 5
gquiz.top() : 30
gquiz.pop() : 20 10 5 1

6、加入比较函数:定制属于自己的堆结构
定义
priority_queue<T, vector<T>, decltype(Compare)> openSet(Compare);
T是数据类型,vector<T>表示存储数据的序列,compare是比较函数
示例:
auto greater = []( ListNode* a, ListNode* b ) { return a->val > b->val; };
priority_queue <ListNode*, std::vector<ListNode *>, decltype(greater)> Q(greater);
这里使用了Lamda表达式来定义了比较函数。
