STL中优先队列(priority_queue)的相关操作
来源:互联网 发布:美工提成怎么算 编辑:程序博客网 时间:2024/06/08 08:14
基本操作:
empty() 如果队列为空返回真
pop() 删除对列首元素
push() 加入一个元素
size() 返回优先队列中拥有的元素个数
top() 返回优先队列首元素
(3)假如优先队列中的元素是一个结构对象或者是类对象,那么如何重新自定义其优先级比较呢?
例子一:定义一个结构体,这个结构体只有一个元素 x 。
①低优先级元素先出队列,也就是x值小的先出队列。
注意到:结构体中重载的运算符只可以是 <, 因为标准库默认使用元素类型的 < 操作符来确定它们之间的优先级关系,如果重载 > ,那么会编译错误。
empty() 如果队列为空返回真
pop() 删除对列首元素
push() 加入一个元素
size() 返回优先队列中拥有的元素个数
top() 返回优先队列首元素
在默认的优先队列中,优先级高的先出队。
(1)优先队列的第一种用法,这是最常用的默认的优先级用法,也就是优先级高的先出队列,例如说一个int优先队列,那么出队的时候就是int大的先出队列。
#include <iostream>#include <queue>using namespace std;int main(void){ priority_queue<int> q; for(int i = 1; i <= 5; i++) q.push(i); cout<<q.size()<<endl; for(int i = 0; i < 5; i++) { cout<<q.top()<<" ";//int默认的是大的优先级高,所以5先出队,依次是4,3,2,1 q.pop(); } cout<<endl; if(q.empty()) cout<<"YES"<<endl; return 0;}
(2)那么如果想要优先队列中低优先级的元素先出队列,怎么办呢? --- 自定义优先级
①方法一:我们可以传入一个比较函数,使用functional头文件中的greater函数对象作为比较函数
注意:首先要添加头文件:#include <functional>
priority_queue< int,vector<int>,greater<int> > q; // 注意:> > 误写成>> 会报错
这样我们就创建了一个低优先级元素先出对列的优先队列。
修改上面的例子,运行,就会发现,输出的顺序变成了:1 2 3 4 5。
当然,与greater相对的less,如果传入less这个比较函数,那么就是高优先级元素先出队列了。
priority_queue< int,vector<int>,less<int> > q;
priority_queue<int> q;
以上创建的优先队列是相同的。
#include <iostream>#include <functional>#include <queue>using namespace std;int main(void){ priority_queue< int,vector<int>,greater<int> > q;//定义小的数优先级高 for(int i = 1; i <= 5; i++) q.push(i); cout<<q.size()<<endl; for(int i = 0; i < 5; i++) { cout<<q.top()<<" "; q.pop(); } cout<<endl; if(q.empty()) cout<<"YES"<<endl; return 0;}
#include <iostream>#include <functional>#include <queue>using namespace std;struct cmp{ bool operator()(int x,int y) { return x>y; //小值优先 }};struct cmp1{ bool operator()(int x,int y) { return x<y; //大值优先 }};int main(void){ priority_queue< int,vector<int>,cmp> q;//定义小的数优先级高 for(int i = 1; i <= 5; i++) q.push(i); cout<<q.size()<<endl; for(int i = 0; i < 5; i++) { cout<<q.top()<<" "; q.pop(); } cout<<endl; if(q.empty()) cout<<"YES"<<endl; return 0;}
(3)假如优先队列中的元素是一个结构对象或者是类对象,那么如何重新自定义其优先级比较呢?
例子一:定义一个结构体,这个结构体只有一个元素 x 。
①低优先级元素先出队列,也就是x值小的先出队列。
#include <iostream>#include <functional>#include <queue>using namespace std;struct number1{ int x; bool operator < (const number1 &a) const { return x>a.x;//小值优先 }};int main(void){ number1 num1[5]; priority_queue<number1>q; for(int i = 1; i <= 5; i++) { num1[i].x = i; q.push(num1[i]); } for(int i = 1; i <= 5; i++) { cout<<q.top().x<<endl; q.pop(); } return 0;}
#include <iostream>#include <functional>#include <queue>using namespace std;struct node{ friend bool operator < (node n1, node n2) { return n1.priority < n2.priority; } int priority; int value;};int main(void){ priority_queue<node> qn; node b[5]; b[0].priority = 6; b[0].value = 1; b[1].priority = 9; b[1].value = 5; b[2].priority = 2; b[2].value = 3; b[3].priority = 8; b[3].value = 2; b[4].priority = 1; b[4].value = 4; for(int i = 0; i < 5; i++) qn.push(b[i]); cout<<"优先级"<<'\t'<<"值"<<endl; for(int i = 0; i < 5; i++) { cout<<qn.top().priority<<'\t'<<qn.top().value<<endl; qn.pop(); } return 0;}
阅读全文
1 0
- STL中优先队列(priority_queue)的相关操作
- STL 中优先队列的使用方法(priority_queue)
- STL - priority_queue(优先队列)
- STL priority_queue 优先队列
- STL priority_queue 优先队列
- STL priority_queue 优先队列
- STL priority_queue优先队列
- stl-优先队列priority_queue
- 谁都能看懂的C++ STL之优先队列(priority_queue)
- STL中的优先队列priority_queue的使用方法
- STL 优先队列 priority_queue 的使用
- STL之priority_queue的用法,优先队列
- STL之priority_queue(优先队列)
- STL之priority_queue(优先队列)
- C++STL--priority_queue(优先队列)
- [转]: STL priority_queue 优先队列
- [转]: STL priority_queue 优先队列
- STL 容器 priority_queue(优先队列)
- [Android] RecyclerView滑动没有惯性效果
- [系统操作][grub4dos]引导硬盘映像文件
- Openwrt WIFI探针开发【一】
- Invalid character constant
- c++string类型管理
- STL中优先队列(priority_queue)的相关操作
- JVM_0.5_小故事
- Java NIO 总结
- Redis学习笔记1 事务
- java内部类学习笔记
- easyui的datagrid自适应排版
- hibernate缓存机制 II
- vmware 10安装教程、VMware Workstation 10.0注册图文教程
- UNITY插件——iTween使用