queue 隊列是一種容器適配器,專門用來知足先進先出的操做,也就是元素在容器的一端插入並從另外一端提取。ios
bool empty() const;
返回隊列是否爲空;size_type size() const;
返回隊列中元素的數量; reference& back();
返回隊列中最後一個元素也即最新的元素的引用;reference& front();
返回隊列中的下一個元素也即最舊的元素的引用;void push (const value_type& val);
在隊尾插入一個元素;void pop();
彈出隊列的下一個元素也即最舊的元素,隊頭元素。優先級隊列是一種容器適配器,根據一些嚴格的弱排序標準,專門設計使其第一個元素始終是它包含的最值元素。其本質上就是一個大頂堆或者小頂堆,會在須要時自動調用函數 make_heap,push_heap 和 pop_heap 自動完成堆化,好比插入新元素或者彈出堆頂元素。函數
bool empty() const;
返回優先級隊列是否爲空;size_type size() const;
返回優先級隊列中元素的數量; const_reference top() const;
返回優先級隊列的頂部元素,也即比較優先級最高的元素;void push (const value_type& val);
在優先級隊列中插入一個元素;void pop();
彈出優先級隊列的頂部元素。下面的例子中展現了構建優先級隊列,將兩個降序的 vector 合併成一個新的降序的 vector。spa
#include <iostream> #include <vector> #include <queue> using namespace std; class mycomparison { bool big_heap; // 大頂堆標誌位,也就是全部元素比堆頂元素小 public: mycomparison(const bool& param=true) {big_heap = param;} bool operator() (const vector<int> vec1, const vector<int> vec2) const { if (big_heap) return (vec1[0] < vec2[0]); else return (vec1[0] > vec2[0]); } }; int main () { vector<int> vec1; vec1.push_back(200); vec1.push_back(50); vec1.push_back(32); vector<int> vec2; vec2.push_back(100); vec2.push_back(96); vec2.push_back(20); vector<int> vec3; // priority_queue<vector<int>, vector< vector<int>>, mycomparison> q(mycomparison(false)); // priority_queue<vector<int>, vector< vector<int>>, mycomparison> q(false); priority_queue<vector<int>, vector< vector<int>>, mycomparison> q; q.push(vec1); q.push(vec2); while (!q.empty()) { vector<int> temp = q.top(); q.pop(); vec3.push_back(temp[0]); temp.erase(temp.begin()); if (temp.size() != 0) q.push(temp); } for (vector<int>::iterator it = vec3.begin(); it != vec3.end(); it++) cout << *it << ' '; return 0; }
[參考資料 [http://www.cplusplus.com]](http://www.cplusplus.com/refe...設計
獲取更多精彩,請關注「seniusen」!
code