在了解priority_queue(優先隊列)前,可以先去瞅瞅queue,下面是傳送門啦>——<
傳送門
priority_queue的基本性能
class priority_queue<>實現出一個queue,只不過其中的元素依照優先級被讀取。priority_queue的接口與queue非常相近,只不過在插入元素后priority_queue會自動為元素排序,默認排序是operator <形成降序排列,也就是說,隊首的元素默認是最大的元素,我們在彈出元素時,就會彈出最大的那個元素。值得注意的是,如果同時存在若干個數值最大的元素,我們無法確知究竟哪一個會入選。
priority_queue使用須知
1.包含頭文件
#include<queue>
2.在頭文件<queue>中,class?priority_queue 定義如下
namespace std
{template <typename T,typename Container = vector<T>typename Compare = less<typename Container::value_type>>class priority_queue;
}
第一個template參數是元素類型,帶有默認值的第二個template參數定義了priority_queue內部用來存放元素的容器,默認容器為vector,帶有默認值的第三個template參數定義出“用以查找下一個最高優先級元素”的排序準則,默認以operator<作為比較標準。
但實際上,你可以用任何sequence容器支持priority_queue,只要他們支持random-access iterator和front()、push_back()、pop_back()等操作就行。由于priority_queue用到了STL heap算法,所以容器必須支持random-access。
priority_queue核心操作
1.核心接口成員函數
push() //將一個元素放入priority_queue中
top() //返回priority_queue的一個隊首元素,但是不刪除它
pop() //刪除priority_queue的一個隊首元素,但是不返回它
2.建立一個升序排序準則的priority_queue
priority_queue<int,vector<int>,greater<int> > pq; //建立一個容器為vector名為 pq 的 priority_queue
3.priority_queue的具體操作
#include<iostream>
#include<queue> //必不可少的頭文件們
using namespace std;
int main()
{//創建一個容器為string的優先隊列priority_queue<string> pq1;//插入三個字符串pq1.push("AWSL");pq1.push("WSND");pq1.push("NMSL");//打印優先隊列cout << "priority_queue pq1:" << endl;cout << "now pq1.size is: ";cout << pq1.size() << endl;cout << "從隊首開始彈出pq1的元素" << endl;cout << pq1.top() << endl;pq1.pop();cout << pq1.top() << endl;pq1.pop();cout << pq1.top() << endl;pq1.pop();cout << "now pq1.size is: ";cout << pq1.size() << endl;cout << endl;//-----------------------------------//創建一個容器默認但是排序準則為升序的優先隊列priority_queue<int, vector<int>, greater<int> > pq2;//插入三個數字pq2.push(4396);pq2.push(777);pq2.push(250);//打印優先隊列cout << "priority_queue pq2:" << endl;cout << "now pq2.size is: ";cout << pq2.size() << endl;cout << "從隊首開始彈出pq2的元素" << endl;cout << pq2.top() << endl;pq2.pop();cout << pq2.top() << endl;pq2.pop();cout << pq2.top() << endl;pq2.pop();cout << "now pq2.size is: ";cout << pq2.size() << endl;
}
本文留下了一個小bug,等待初學者自己去發現喲,嘻嘻嘻/*-*\
?