优先级队列

  1 #include <iostream>
  2 #include <queue>
  3
  4 #include <functional>
  5 using namespace std;
  6
  7 int main()
  8 {
  9     /*在优先队列中,优先级高的元素先出队列。
 10 标准库默认使用元素类型的<操作符来确定它们之间的优先级关系。
 11 优先队列的第一种用法,也是最常用的用法:
 12
 13 priority_queue<int> qi;
 14 通过<操作符可知在整数中元素大的优先级高。
 15
 16     const int len=12;
 17     int a[len]={14,10,56,7,83,22,36,91,3,47,72,0};
 18     priority_queue<int> q1;
 19     for(int i=0;i<len;i++){
 20         q1.push(a[i]);
 21     }
 22     while(!q1.empty()){
 23         cout<<q1.top()<<"  ";
 24         q1.pop();
 25     }
 26
 27     */
 28
 29
 30
 31 /*
 32 **********************第二种方法:
 33 在示例1中,如果我们要把元素从小到大输出怎么办呢?
 34 这时我们可以传入一个比较函数,使用functional函数对象作为比较函数。
 35
 36 priority_queue<int, vector<int>, greater<int> >q1;
 37 其中
 38 第二个参数为容器类型。
 39 第二个参数为比较函数。
 40 */
 41
 42
 43     const int len=12;
 44     int a[len]={14,10,56,7,83,22,36,91,3,47,72,0};
 45     priority_queue<int,vector<int>,less<int> > q1;
 46     for(int i=0;i<len;i++){
 47         q1.push(a[i]);
 48     }
 49     while(!q1.empty()){
 50         cout<<q1.top()<<"  ";
 51         q1.pop();
 52     }
 53
 54
 55 /*
 56 第三种方法:
 57 自定义优先级。
 58
 59 struct node
 60 {
 61     friend bool operator< (node n1, node n2)
 62     {
 63         return n1.priority < n2.priority;
 64     }
 65     int priority;
 66     int value;
 67 };
 68 在该结构中,value为值,priority为优先级。
 69 通过自定义operator<操作符来比较元素中的优先级。
 70 在示例3中输出结果为:
 71 优先级  值
 72 9          5
 73 8          2
 74 6          1
 75 2          3
 76 1          4
 77 但如果结构定义如下:
 78
 79 struct node
 80 {
 81     friend bool operator> (node n1, node n2)
 82     {
 83         return n1.priority > n2.priority;
 84     }
 85     int priority;
 86     int value;
 87 };
 88 则会编译不过(G++编译器)
 89 因为标准库默认使用元素类型的<操作符来确定它们之间的优先级关系。
 90 而且自定义类型的<操作符与>操作符并无直接联系,故会编译不过。
 91
 92 */
 93
 94 /*
 95 kuangbin写法:
 96 struct Node
 97 {
 98     int D,P;
 99 }node[MAXN];
100 bool cmp1(Node a,Node b)
101 {
102     return a.D<b.D;
103 }
104
105 struct cmp
106 {
107     bool operator ()(int x, int y)
108     {
109         return x > y;// x小的优先级高
110       //也可以写成其他方式,如: return p[x] > p[y];表示p[i]小的优先级高
111     }
112 };
113 priority_queue<int, vector<int>, cmp>q;//定义方法
114
115
116 strunct cmp{
117
118     bool operator () (int x,int y)
119     {
120         return x > y;
121     }
122 }
123
124
125 */
126
127
128
129
130
131
132
133     return 0;
134 }
时间: 2024-10-11 20:39:35

优先级队列的相关文章

Rabbitmq中的优先级队列操作

1.%% 普通队列操作 in(X, 0, {queue, [_] = In, [], 1}) ->{queue, [X], In, 2}; in(X, 0, {queue, In, Out, Len}) when is_list(In), is_list(Out) -> {queue, [X|In], Out, Len + 1}; 优先级队列操作: in(X, Priority, Q = {queue, [], [], 0}) -> in(X, Priority, {pqueue, []

初学算法-基于最小堆的优先级队列C++实现

笔者近日实现了最小堆类及其派生的优先级队列,特将代码奉上,不足之处还请指出! 在实现优先级队列时,笔者表示萌萌哒没有用过template写派生类,结果写完了出现error: *** was not decleared in this scope..后来各种补上this->才完事,在CSDN(笔者的帖子地址? http://bbs.csdn.net/topics/391806995)上提问后才知道是模板参数依赖,笔者表示涨姿势了.. /**  * The Minimum Heap Class an

【转】java中PriorityQueue优先级队列使用方法

优先级队列是不同于先进先出队列的另一种队列.每次从队列中取出的是具有最高优先权的元素. PriorityQueue是从JDK1.5开始提供的新的数据结构接口. 如果不提供Comparator的话,优先队列中元素默认按自然顺序排列,也就是数字默认是小的在队列头,字符串则按字典序排列. 由于网上的资料大多将优先级队列各个方法属性,很少有实例讲解的,为方便大家以后使用,我就写了个demo~ 如果想实现按照自己的意愿进行优先级排列的队列的话,需要实现Comparator接口.下面的方法,实现了根据某个变

STL学习系列七:优先级队列priority_queue容器

1.简介 最大值优先级队列.最小值优先级队列 优先级队列适配器 STL priority_queue 用来开发一些特殊的应用,请对stl的类库,多做扩展性学习 如果我们给每个元素都分配一个数字来标记其优先级,不妨设较小的数字具有较高的优先级,这样我们就可以在一个集合中访问优先级最高的元素并对其进行查找和删除操作了.这样,我们就引入了优先级队列 这种数据结构. 优先级队列(priority queue) 是0个或多个元素的集合,每个元素都有一个优先权,对优先级队列执行的操作有(1)查找(2)插入一

优先级队列及小顶堆排序

优先级队列及小顶堆排序实现 /** @file          HeapSort.h *  @copyright     personal *  @brief         优先级队列及堆排序 *  @version       V1.0.0 *  @author        fangyuan *  @date          2015/12/31 *  @note          测试版本 */ #include "iostream" using namespace std

初学图论-Dijkstra单源最短路径算法基于优先级队列(Priority Queue)的实现

这一次,笔者使用了STL库中的优先级队列(Priority Queue)来完成Dijkstra算法中extract-min()语句(即从未选中的节点中选取一个距离原点s最小的点)的功能.由于优先级队列的插入.删除操作只需要logn的时间花费,因此降低了不少运行时间. 本文使用C++实现了这一基本算法.参考<算法导论>第24.3节. /**  * Dijkstra's Single Source Shortest Path Algorithm in C++  * Time Cost : O(Ml

STL之优先级队列priority_queue

摘要: priority_queue,自适应容器(即容器适配器):不能由list来组建: 最大值优先级队列(最大值始终在对首,push进去时候) 最小值优先级队列: 优先级队列适配器 STL  priority_queue priority_queue<int, deque<int> > pg; priority_queue<int, vector<int> > pg; STL中实现的方法: pg.empty(); pg.size(); pg.top();

队列的应用:优先级队列

优先级队列:如果我们给每个元素都分配一个数字来标记其优先级,不妨设较小的数字具有较高的优先级,这样我们就可以在一个集合中访问优先级最高的元素并对其进行查找和删除操作了. 优先级队列(priority queue)是0个或多个元素的集合,每个元素都有一个优先权,对优先级队列执行的操作有(1)查找(2)插入一个新元素(3)删除 一般情况下,查找操作用来搜索优先权最大的元素,删除操作用来删除该元素 .对于优先权相同的元素,可按先进先出次序处理或按任意优先权进行. 以上是网上常见的对优先级队列的描述.偷

JAVA优先级队列测试

package code.test; import java.util.Comparator; import java.util.Iterator; import java.util.PriorityQueue; import java.util.Queue; /** * 实验表明,在java中: * 1.优先级队列打印或者迭代,得到的输出顺序为堆结构数组的顺序,大致有序但不完全保证顺序 * 2.由于堆排序是不稳定排序,在优先级相同的情况下,元素不会保持原来的顺序输出 * Created by

优先级队列与堆排序

转自:http://www.cnblogs.com/yangecnu/p/Introduce-Priority-Queue-And-Heap-Sort.html 在很多应用中,我们通常需要按照优先级情况对待处理对象进行处理,比如首先处理优先级最高的对象,然后处理次高的对象.最简单的一个例子就是,在手机上玩游戏的时候,如果有来电,那么系统应该优先处理打进来的电话. 在这种情况下,我们的数据结构应该提供两个最基本的操作,一个是返回最高优先级对象,一个是添加新的对象.这种数据结构就是优先级队列(Pri