priority_queue(queue類似)完全以底部容器為根據,再加上二叉堆(大根堆或者小根堆)的實現原理,所以其實現非常簡單,缺省情況下priority_queue以vector作為底部容器。另外priority_queue缺省比較規則是less:
class Compare = less<typename Sequence::value_type>
less對應的是按照大根堆來實現優先級隊列,當然也可以將比較規則設置為greater,這時候是按照小根堆來實現的優先級隊列。
priority_queue(queue一樣)以底部容器完成其所有工作,具有這種“修改某物接口,形成另一種風貌”性質者,稱為適配器(adapter)。因此,priority_queue往往不被歸類於容器(container),而是歸類於容器適配器(container adapter)。priority_queue是一種順序容器適配器,STL中順序容器還包括queue,stack。這三種順序容器適配器都使用底層的順序容器完成自己應該完成的工作。
以上內容總結自《STL源碼剖析》。
priority_queue示例:
#include <iostream> #include <vector> #include <queue> using namespace std; int main() { int ia[9] = {0,1,2,3,4,8,9,3,5}; priority_queue< int, vector<int>, greater<int> > ipq(ia, ia + 9);//Compare為greater<int>說明實現原理是小根堆,可以改為less<int>觀察輸出 cout << "size = " << ipq.size() << endl; for(int i = 0; i < ipq.size(); ++i){ cout << ipq.top() << " "; } cout << endl; while(!ipq.empty()){ cout << ipq.top() << " "; ipq.pop(); } cout << endl; return 0; }