STL中的优先级队列priority_queue
2017-09-08 17:47
459 查看
priority_queue(queue类似)完全以底部容器为根据,再加上二叉堆(大根堆或者小根堆)的实现原理,所以其实现非常简单,缺省情况下priority_queue以vector作为底部容器。另外priority_queue缺省比较规则是less:
less对应的是按照大根堆来实现优先级队列,当然也可以将比较规则设置为greater,这时候是按照小根堆来实现的优先级队列。
priority_queue(queue一样)以底部容器完成其所有工作,具有这种“修改某物接口,形成另一种风貌”性质者,称为适配器(adapter)。因此,priority_queue往往不被归类于容器(container),而是归类于容器适配器(container adapter)。priority_queue是一种顺序容器适配器,STL中顺序容器还包括queue,stack。这三种顺序容器适配器都使用底层的顺序容器完成自己应该完成的工作。
以上内容总结自《STL源码剖析》。
priority_queue示例:
4000
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; }
4000
相关文章推荐
- C++ STL 有关容器部分 priority_queue 优先级队列的基本操作以及认识案例
- STL系列之五 priority_queue 优先级队列
- STL之优先级队列priority_queue
- STL中的优先级队列priority_queue
- C++STL优先级队列priority_queue
- STL学习笔记6 -- 栈stack 、队列queue 和优先级priority_queue 三者比较
- STL之优先级队列priority_queue
- STL系列之五 priority_queue 优先级队列
- STL中的优先级队列(priority_queue)的自己实现priqueue
- STL中的优先级队列(priority_queue)的自己实现priqueue
- C++ 标准模板库STL 优先级队列 priority_queue 使用方法与应用介绍(一)
- STL系列之五 priority_queue 优先级队列
- c++之STL(8)优先级队列 priority_queue
- STL之优先级队列priority_queue
- [转载] STL 之 priority_queue 优先级队列
- STL系列之五 priority_queue 优先级队列
- STL系列之五 priority_queue 优先级队列
- STL - priority_queue 优先级队列
- STL——priority_queue 优先级队列
- STL系列之五 priority_queue 优先级队列