优先队列容器与队列一样,只能从队尾插入元素,从队首删除元素。但是它有一个特性,就是队列中最大的元素总是位于队首,所以出队时,并非按照先进先出的原则进行,而是将当前队列中最大的元素出队。
c++优先队列深入讲解:
优先队列本质是个heap,在STL中实现代码,在头文件中,归属于命名空间std
优先级队列可以用向量(vector)或双向队列(deque)来实现(注意list container不能用来实现queue,因为list的迭代器不是任意存取iterator,而pop中用到堆排序时是要求randomaccess iterator 的!):
priority_queue<vector, less > pq1; // 使用递增less函数对象排序
priority_queue<deque, greater > pq2; // 使用递减greater函数对象排序
队列的两种申明方式:
std::priority_queue pq;
std::priority_queue<T, std::vector, cmp> pq;
第一种实现方式:
STL源码:
template<class _Ty,class _Container = vector<_Ty>,class _Pr = less >
第一个是优先队列处理的类(说简单一点就是队列元素类型,可以是结构体,第二个参数是容纳优先队列的容器,vector向量,容器默认是vector,也可以是dequeue,因为后者功能更强大,而性能相对于vector较差,考虑到包装在优先队列后,后者功能
c++优先队列讲解
最新推荐文章于 2024-04-09 22:03:48 发布