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。ui
#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]spa
獲取更多精彩,請關注「seniusen」! 設計