priority_queue优先队列容器
2015-04-24 14:50
411 查看
priority_queue优先队列容器与队列一样,只能从队尾插入元素,从队首删除元素.但是它有一个特性,就是队列最大的元素总是位于队首,所以出队时,并非按照先进先出的原则进行,而是将当前队列中最大的元素出队.这点类似于给队列里的元素进行了由大到小的顺序排序.元素的比较规则默认按元素的值由大到小排序,当然,可以重载"<"操作符来从新定义比较规则.
案例1:
重载"<"操作符来定义优先级
如果优先队列的元素类型是结构体,可以通过在结构体中重载"<"操作符的方法来修改优先队列的优先性.
案例二:
重载"()"操作符来定义优先级
如果优先队列的元素不是结构体类型,则可以通过重载"()"操作符的方式来定义优先级.当然,元素是结构体类型,也可以通过重载"()"操作符来定义优先级,而不是一定要在结构体内重载"<"操作符才行.
代码:
案列3:
像int,float,double,char这样的类型可以用更简单的代码来实现由小到大的排列.
案例1:
重载"<"操作符来定义优先级
如果优先队列的元素类型是结构体,可以通过在结构体中重载"<"操作符的方法来修改优先队列的优先性.
#include <queue> #include <string> #include <iostream> using namespace std; //定义结构体 struct Info { string name; float score; //重载"<"操作符,指定优先规则(排序规则) bool operator < (const Info &a) const { //按score由从小到大排列.如果要由大到小排列,使用">"号即可 return a.score < score; } }; int main() { //定义优先队列,元素类型为Info结构体 priority_queue<Info> pq; //定义结构体变量 Info info; info.name = "Jack"; info.score = 68.5; pq.push(info); info.name = "Bomi"; info.score = 18.5; pq.push(info); info.name = "Peti"; info.score = 90; pq.push(info); //元素全部出队 while(pq.empty() != true) { //返回队首元素 cout << pq.top().name << " : " << pq.top().score << endl; //出队,删除队首元素 pq.pop(); } return 0; }
案例二:
重载"()"操作符来定义优先级
如果优先队列的元素不是结构体类型,则可以通过重载"()"操作符的方式来定义优先级.当然,元素是结构体类型,也可以通过重载"()"操作符来定义优先级,而不是一定要在结构体内重载"<"操作符才行.
代码:
#include <queue> #include <vector> #include <iostream> using namespace std; struct myComp { bool operator()(const int &a, const int &b) { //由小到大排列采用">"号,如果要由大到小排列,则采用"<"号 return a > b; } }; int main() { //定义优先队列,元素类型为int型,显示说明内部结构式vector priority_queue<int, vector<int>, myComp> pq; //入队 pq.push(1); pq.push(9); pq.push(2); pq.push(30); //元素全部出队 while(pq.empty() != true) { //返回队首元素 cout << pq.top() << " "; //出队,删除队首元素 pq.pop(); } cout << endl; return 0; }
案列3:
像int,float,double,char这样的类型可以用更简单的代码来实现由小到大的排列.
#include <queue> #include <vector> #include <iostream> using namespace std; int main() { //定义优先队列,元素类型为int型,显示说明内部结构式vector priority_queue<int, vector<int>, greater<int> > pq; //入队 pq.push(1); pq.push(9); pq.push(2); pq.push(30); //元素全部出队 while(pq.empty() != true) { //返回队首元素 cout << pq.top() << " "; //出队,删除队首元素 pq.pop(); } cout << endl; return 0; }
相关文章推荐
- priority_queue优先队列容器。(爱上原创和改造) nyoj 55 懒省事的小明
- 第20章 priority_queue优先队列容器
- [C++ STL] 优先队列容器 priority_queue
- Priority_queue优先队列容器
- priority_queue优先队列容器
- priority_queue 优先队列容器
- STL(二十)priority_queue优先队列容器
- 优先队列容器-priority_queue
- C++STL之priority_queue优先队列容器
- STL queue队列容器和priority_queue优先队列容器
- queue队列容器-priority_queue优先队列
- ACM学习历程19——queue队列容器与priority_queue优先队列容器
- priority_queue 优先队列容器
- STL序列式容器之优先队列——priority_queue
- 优先队列priority_queue容器的使用方法:出队,入队,删除队首元素,判断是否为空
- stack堆栈容器、queue队列容器和priority_queue优先队列容器(常用的方法对比与总结)
- 【优先队列】【堆】STL之priority_queue、make_heap()、push_heap()、pop_heap()、容器适配器
- priority_queue<int,vector<int>,greater<int>>优先队列 按照由小到大顺序
- 队列(queue)优先队列(priority_queue)简介
- 优先队列 java PriorityQueue