[queue] c++優先佇列(priority_queue)用法詳解
阿新 • • 發佈:2018-12-10
要包含標頭檔案#include <queue>
優先佇列具有佇列的所有特性,包括基本操作,只是在這基礎上添加了內部的一個排序,它本質是一個堆實現的
定義:priority_queue<Type, Container, Functional>
Type 就是資料型別,Container 就是容器型別(Container必須是用陣列實現的容器,比如vector,deque等等,但不能用 list。STL裡面預設用的是vector),Functional 就是比較的方式,當需要用自定義的資料型別時才需要傳入這三個引數,使用基本資料型別時,只需要傳入資料型別,預設是大頂堆
一般是:
//升序佇列
priority_queue <int,vector<int>,greater<int> > q;
//降序佇列
priority_queue <int,vector<int>,less<int> >q;
//greater和less是std實現的兩個仿函式(就是使一個類的使用看上去像一個函式。其實現就是類中實現一個operator(),這個類就有了類似函式的行為,就是一個仿函式類了)
- 基本型別例子:
#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; }
輸出
4 3 2 1 0 0 1 2 3 4 cbd abcd abc