标签:完全 include algorithm tor queue div style 特性 第一个
priority_queue(优先队列)是一个拥有权值观念的queue,它允许加入新元素,删除旧元素,审视元素值等功能。由于这是一个queue,所以只允许在底端加入元素,并从顶端取出元素, 除此之外别无其它存取元素的途径。
缺省情况下priority_queue系列利用一个max_heap(最大堆)完成,后者是一个以vector表现的完全二叉树。Max_heap可以满足priority_queue所需要的“依权值高低自动递减排序”的特性。
priority_queue完全以底部容器为根据,再加上heap处理规则,所以其实现非常简单,这里给出其模板声明:
template <class T, class Sequence = vector<T>, class Compare = less<typename Sequence::value_type>> class priority_queue { //… protected: Sequence c; // 底层容器 Compare comp; // 元素大小比较标准 //… };
priority_queue模板有3个参数,第一个为元素类型,第二个为指定底层容器,默认为vector,第三个为内部元素比较函数,默认为标准库内置关系运算类仿函数less, 顺便把less的模板找出来看看:
template<class T> struct less : public binary_function<T, T, bool> { bool operator() (const T& x, const T& y) { return x < y;} };
类似内置关系运算仿函数一共6个,为别为:
等于 equal_to<T> 不等于 not_equal_to<T> 大于 greater<T> 大于或等于 greater_equal<T> 小于 less<T> 小于或等于 less_equal<T>
之后会单独将仿函数详细介绍下,这里只做相关了解。
下面给出测试代码:
#include <queue> #include <iostream> #include <algorithm> using namespace std; int main() { int ia[9] = {0,1,2,3,4,8,9,3,5}; priority_queue<int> ipq(ia, ia+9); cout << "size = " << ipq.size() << endl; // size = 9 for (int i = 0; i < ipq.size(); i++) { cout << ipq.top() << ‘ ‘; // 9 9 9 9 9 9 9 9 9 } cout << endl; while (!ipq.empty()) { cout << ipq.top() << ‘ ‘; // 9 8 5 4 3 3 2 1 0 ipq.pop(); } cout << endl; return 0; }
标签:完全 include algorithm tor queue div style 特性 第一个
原文地址:http://www.cnblogs.com/xiguas/p/6083981.html