#include<iostream> #include <queue> using namespace std; int main() { //對於基礎類型 默認是大頂堆 priority_queue<int> a; //等同於 priority_queue<int, vector<int>, less<int> > a; // 這里一定要有空格,不然成了右移運算符↓ priority_queue<int, vector<int>, greater<int> > c; //這樣就是小頂堆 priority_queue<string> b; for (int i = 0; i < 5; i++) { a.push(i); c.push(i); } while (!a.empty()) { cout << a.top() << ' '; a.pop(); } cout << endl; while (!c.empty()) { cout << c.top() << ' '; c.pop(); } cout << endl; b.push("abc"); b.push("abcd"); b.push("cbd"); while (!b.empty()) { cout << b.top() << ' '; b.pop(); } cout << endl; return 0; }
優先隊列實質就是堆實現的;
默認的定義優先隊列是大根堆,即父節點的值大於子節點的值。
priority_queue<int> a;
//等同於 priority_queue<int, vector<int>, less<int> > a;
當然也可以定義小根堆:
priority_queue<int, vector<int>, greater<int> > c; //這樣就是小頂堆
將pair加入到隊列中:
priority_queue<pair<int, int> > a;//先比較first 再比較second
對於優先隊列的操作;
top 訪問隊頭元素
empty 隊列是否為空
size 返回隊列內元素個數
push 插入元素到隊尾 (並排序)
emplace 原地構造一個元素並插入隊列
pop 彈出隊頭元素
swap 交換內容
只能從隊列后邊加入,從隊列前邊拿出,在遍歷的時候可以通過p.size()或者p.empty();
摘抄自自博客https://blog.csdn.net/weixin_36888577/article/details/79937886