STL priority_queue

优先队列是队列的一种,不过它可以按照自定义的一种方式(数据的优先级)来对队列中的数据进行动态的排序

每次的push和pop操作,队列都会动态的调整,以达到我们预期的方式来存储。

例如:我们常用的操作就是对数据排序,优先队列默认的是数据大的优先级高

所以我们无论按照什么顺序push一堆数,最终在队列里总是top出最大的元素。

用法:

示例:将元素5,3,2,4,6依次push到优先队列中,print其输出。

1. 标准库默认使用元素类型的<操作符来确定它们之间的优先级关系。

priority_queue<int> pq;

通过<操作符可知在整数中元素大的优先级高。

故示例1中输出结果为: 6 5 4 3 2

2. 数据越小,优先级越高

priority_queue<int, vector<int>, greater<int> >pq; 

其中

第二个参数为容器类型。

第二个参数为比较函数。

故示例2中输出结果为:2 3 4 5 6

 优先队列成员函数(除构造函数、析构函数)简介:

(1)priority_queue::empty

判断队列是否为空(也即是size是否为0),是则返回true,否则返回false。优先队列的此成员函数实际上调用底层容器的同名函数。

(2)priority_queue::size

返回队列中元素的个数。此函数实际上调用底层容器的同名函数。这个函数也可以用于判断队列是否为空。

(3)priority_queue::top

返回队头元素的常引用,队头元素是在所设定的比较关系下最大也即优先级最高的元素。此函数实际上调用底层容器的front函数。

(4)priority_queue::pop

清除队头元素。

(5)priority_queue::push

给队列插入元素,新元素会按其优先级被排列到适当位置。

注:重载>号会编译出错,因为标准库默认使用元素类型的<操作符来确定它们之间的优先级关系。

而且自定义类型的<操作符与>操作符并无直接联系

代码:

 1 #include<iostream>
 2 #include<functional>
 3 #include<queue>
 4 using Namespace stdnamespace std;
 5 struct node
 6 {
 7     friend bool operator< (node n1, node n2)
 8     {
 9         return n1.priority < n2.priority;
10     }
11     int priority;
12     int value;
13 };
14 int main()
15 {
16     const int len = 5;
17     int i;
18     int a[len] = {3,5,9,6,2};
19     //示例1
20     priority_queue<int> qi;
21     for(i = 0; i < len; i++)
22         qi.push(a[i]);
23     for(i = 0; i < len; i++)
24     {
25         cout<<qi.top()<<" ";
26         qi.pop();
27     }
28     cout<<endl;
29     //示例2
30     priority_queue<int, vector<int>, greater<int> >qi2;
31     for(i = 0; i < len; i++)
32         qi2.push(a[i]);
33     for(i = 0; i < len; i++)
34     {
35         cout<<qi2.top()<<" ";
36         qi2.pop();
37     }
38     cout<<endl;
39     //示例3
40     priority_queue<node> qn;
41     node b[len];
42     b[0].priority = 6; b[0].value = 1;
43     b[1].priority = 9; b[1].value = 5;
44     b[2].priority = 2; b[2].value = 3;
45     b[3].priority = 8; b[3].value = 2;
46     b[4].priority = 1; b[4].value = 4;
47
48     for(i = 0; i < len; i++)
49         qn.push(b[i]);
50     cout<<"优先级"<<‘\t‘<<"值"<<endl;
51     for(i = 0; i < len; i++)
52     {
53         cout<<qn.top().priority<<‘\t‘<<qn.top().value<<endl;
54         qn.pop();
55     }
56     return 0;
57 }

时间: 2024-10-10 01:34:29

STL priority_queue的相关文章

STL - priority_queue(优先队列)

优先级队列priority_queue 最大值优先级队列.最小值优先级队列 优先级队列适配器 STL priority_queue 用来开发一些特殊的应用. priority_queue<int, deque<int>> pq; priority_queue<int, vector<int>> pq; pq.empty() pq.size() pq.top() pq.pop() pq.push(item) demo #include <iostream

详解C++ STL priority_queue 容器

详解C++ STL priority_queue 容器 本篇随笔简单介绍一下\(C++STL\)中\(priority_queue\)容器的使用方法和常见的使用技巧. priority_queue容器的概念 \(priority_queue\)在英文中是优先队列的意思. 队列是一种基本的数据结构.其实现的基本示意图如下所示: 而\(C++STL\)中的优先队列就是在这个队列的基础上,把其中的元素加以排序.其内部实现是一个二叉堆.所以优先队列其实就是把堆模板化,将所有入队的元素排成具有单调性的一队

C++ STL priority_queue

转自: priority_queue 优先级队列是一个拥有权值概念的单向队列queue,在这个队列中,所有元素是按优先级排列的(也可以认为queue是个按进入队列的先后做为优先级的优先队列--先进入队列的元素优先权要高于后进入队列的元素). 在计算机操作系统中,优先级队列的使用是相当频繁的,进线程调度都会用到. 在STL的具体实现中,priority_queue也是以别的容器作为底部结构,再根据堆的处理规则来调整元素之间的位置. 模板声明: priority_queue<Type, Contai

STL priority_queue 优先队列 小记

今天做题发现一个很有趣的地方,竟然还是头一次发现,唉,还是太菜了. 做图论用STL里的priority_queue去优化prim,由于特殊需求,我需要记录生成树中是用的哪些边. 于是,我定义的优先队列类型的数据结构如下: 1 struct node //优先队列存储结构,v存储节点号,e存储边号,dis[]为到该点的最短距离 2 { 3 int v,e; 4 node(){} 5 node(int _v,int _e):v(_v),e(_e){} 6 bool operator <(const

STL - priority_queue(优先队列)

参考:http://www.cnblogs.com/xzxl/p/7266404.html 一.基本定义: 优先队列容器与队列一样,只能从队尾插入元素,从队首删除元素.但是它有一个特性,就是队列中最大的元素总是位于队首,所以出队时,并非按照先进先出的原则进行,而是将当前队列中最大的元素出队.这点类似于给队列里的元素进行了由大到小的顺序排序.元素的比较规则默认按元素值由大到小排序,可以重载"<"操作符来重新定义比较规则. 优先级队列可以用向量(vector)或双向队列(deque)

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

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

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();

c++中STL之heap, priority_queue使用

一.heap heap并不属于STL容器组件,它分为 max heap 和min heap,在缺省情况下,max-heap是优先队列(priority queue)的底层实现机制.而这个实现机制中的max-heap实际上是以一个vector表现的完全二叉树(complete binary tree).STL在<algorithm.h>中实现了对存储在vector/deque 中的元素进行堆操作的函数,包括make_heap, pop_heap, push_heap, sort_heap,对不愿

C++STL容器简析

标准STL序列容器:vector.string.deque和list.标准STL关联容器:set.multiset.map和multimap.非标准的关联容器hash_set.hase_multiset.hash_map和hash_multimap. (1)vector容器vector的数据安排以及操作方式,与array非常相似.两者的唯一区别在于空间的运用的灵活性.array是静态空间,一旦配置了就不能改变.vector是动态空间,随着元素的加入,它的内部机制会自行扩充空间以容纳新元素.因此,