priority_queue用法
来源:互联网 发布:mac上能玩的热门网游 编辑:程序博客网 时间:2024/04/30 11:13
在优先队列中,优先级高的元素先出队列。
先写一个用 STL 里面堆算法实现的与真正的STL里面的 priority_queue 用法相
似的 priority_queue, 以加深对 priority_queue 的理解
push_heap():将容器中的最后一个元素加入堆中
pop_head():将堆中最大的(或者自定义比较函数,默认为<)元素推到容器首
- #include
- #include
- #include
-
- using
namespace std; -
- class
priority_queue - {
-
-
vector<</span>int> data; -
-
-
push( intt ){ -
data.push_back(t); -
push_heap( data.begin(), data.end()); -
} -
-
pop(){ -
pop_heap( data.begin(), data.end() ); -
data.pop_back(); -
} -
-
top() return{ data.front(); } -
size() return{ data.size(); } -
empty() return{ data.empty(); } - };
-
- int
main() - {
-
priority_queue test; -
test.push( 3 ); -
test.push( 5 ); -
test.push( 2 ); -
test.push( 4 ); -
-
!test.empty() ){ -
cout << test.top() << endl; -
test.pop(); } -
-
0; - }
STL里面的 priority_queue 写法与此相似,只是增加了模板及相关的迭代器什么的。
priority_queue 对于基本类型的使用方法相对简单。
他的模板声明带有三个参数,priority_queue
Type 为数据类型, Container 为保存数据的容器,Functional 为元素比较方式。
Container 必须是用数组实现的容器,比如 vector, deque 但不能用 list.
STL里面默认用的是 vector. 比较方式默认用 operator< ,所以如果你把后面俩个
参数缺省的话,优先队列就是大顶堆,队头元素最大。
(1)使用默认参数
- #include
- #include
- using
namespace std; -
- int
main(){ -
priority_queue<</span>int> q; -
-
int i= 0; i< 10; ++i ) -
q.push(i%4); -
-
!q.empty() ){ -
cout << q.top() << endl; -
q.pop(); -
} -
0; - }
(2)自定义比较函数(可以使用STL里的函数greater等,或者重载<,这样就不需要用三个参数,或者自定义比较函数)
priority_queue, greater>;
bool operator<
priority_queue
bool cmp(int a,int b) { return a < b;}
priority_queue,cmp>;
本文出自 “牛哥的博客”博客,请务必保留此出处http://nxlhero.blog.51cto.com/962631/699349
如果要以结构体为优先队列元素的话,则可以这么写
#include<iostream>
#include<queue>
using namespace std;
struct node{
};
struct cmp{
};
int main(){
}
a>b和a<b的结果到底是什么?最后,我想到了一个场景来记忆这里的比较函数的意义:a,b是该数据结构中前后两个元素,如果返回true,这两个元素就需要交换位置,反之则不需要。
- priority_queue用法
- priority_queue用法
- priority_queue用法
- priority_queue用法
- priority_queue用法
- priority_queue用法
- priority_queue用法
- priority_queue用法
- priority_queue用法
- priority_queue用法
- priority_queue用法
- priority_queue用法
- priority_queue用法
- priority_queue用法
- priority_queue用法
- priority_queue用法
- priority_queue用法
- priority_queue用法
- /etc/profile、~/.bash_profile等…
- ubuntu下安装mysql
- strust2的“No result defined for action cn.xx.xxxAction and result input”错误
- poj 2482 Stars in Your Window(线段树+离散化+扫描线)
- C++学习【原创】remove和rem…
- priority_queue用法
- POJ3373Changing Digits
- 搜索,A* IDA*
- linux常用命令100个用法
- AC自动机算法
- 怎样写一个解释器
- 什么是“脚本语言”
- infiniDB在linux下完成倒库
- Lisp 已死,Lisp 万岁!