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