STL容器 -- Priority_Queue

核心:和队列相似,但优先队列中的 “下一个元素” 指的是 “优先级最高” 的元素.

头文件:#include<queue>

普通类型的构造方法:

priority_queue<int> maxQu;                     //构造一个包含 int 型元素的优先队列,默认优先级为 int 元素的值越大则优先级越高
priority_queue< int, vector<int>, greater<int> > minQu;     //构造一个包含 int 型元素的优先队列,优先级为 int 元素的值越小则优先级越高

除此之外,改变默认的优先级还可以自己写比较函数:

struct cmp {
    bool operator () (const int a, const int b) const {
        return a > b; // 值越小优先级越高,这里可以灵活的变通,比如“个位越小优先级越高" 则可以写成: reutn a % 10 > b % 10;
    }
};
priority_queue <int, vector<int>, cmp> minQu;

常用的操作:

priQu.size()     //返回优先队列内部的元素个数
priQu.empty()   //判断队列是否为空
priQu.push(elem) //将元素 elem 添加到优先队列
priQu.top()      //返回优先队列内优先级最高的那个元素, 如果同时存在多个, 则只返回其中一个
priQu.top()      //移除优先队列内优先级最高的那个元素

结构体类型的应用:

//优先队列的内部元素为结构体类型时,需要重载 ‘<‘ 运算符
struct NODE { //结构体的写法
    int x, y;
    bool operator < (const NODE& a) const { //1 级优先级为 x 的值越大优先级越高,2 级优先级为 b 越小优先级越高
        if(x == a.x) return y > a.y; // 当 1 级优先级无法判断时才考虑 2 级优先级
        return  x < a.x;
    }
};
priority_queue<NODE> ndQu;//结构体类型的优先队列的构造
时间: 2024-10-13 20:50:33

STL容器 -- Priority_Queue的相关文章

STL容器用法速查表:list,vector,stack,queue,deque,priority_queue,set,map

STL容器用法速查表:list,vector,stack,queue,deque,priority_queue,set,map   list vector deque stack queue priority_queue set [unordered_set] map [unordered_map] multimap [unordered_multimap]     contiguous storage double-ended queue LIFO FIFO 1st is greatest  

STL 容器

标准库为相关对象的存储集合提供了各种类型安全容器.容器是类模板:在声明容器变量时,你可以指定该容器将保存的元素类型.可以使用初始值设定项列表构造容器.它们具有用于添加和移除元素以及执行其他操作的成员函数.可使用迭代器循环访问容器中的元素以及访问单个元素.可以通过使用其成员函数和运算符以及全局函数来显式使用迭代器.还可以隐式使用它们,例如通过使用范围 for 循环.所有 STL 容器的迭代器都有一个通用接口,但是每个容器会定义自己的专用迭代器. 容器可以分为三个类别:序列容器.关联容器和容器适配器

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是动态空间,随着元素的加入,它的内部机制会自行扩充空间以容纳新元素.因此,

STL之priority_queue(优先队列)

priority_queue是一个容器适配器,在这个容器里第一个数据元素是最大的.它的使用场景是什么样:如果12306抢票,为什么黄牛能抢这么多票,感觉12306那边的请求队列是一个优先队列,黄牛的请求携带了一个隐含参数,所以他的请求最先执行.当然这是怀疑.不过也是优先级队列的使用场景.还可以进行排序,把数据压入优先队列中,然后出队列就是由大到小排列了 注意:stl的priority_queue容器需要一个boolean operator<(const T& ,const T&)函数

STL容器之优先队列

STL容器之优先队列 优先级队列,以前刷题的时候用的比较熟,现在竟然我只能记得它的关键字是priority_queue(太伤了).在一些定义了权重的地方这个数据结构是很有用的. 先回顾队列的定义:队列(queue)维护了一组对象,进入队列的对象被放置在尾部,下一个被取出的元素则取自队列的首部.priority_queue特别之处在于,允许用户为队列中存储的元素设置优先级.这种队列不是直接将新元素放置在队列尾部,而是放在比它优先级低的元素前面.标准库默认使用<操作符来确定对象之间的优先级关系,所以

STL容器之优先队列(转)

STL容器之优先队列 原地址:http://www.cnblogs.com/summerRQ/articles/2470130.html 优先级队列,以前刷题的时候用的比较熟,现在竟然我只能记得它的关键字是priority_queue(太伤了).在一些定义了权重的地方这个数据结构是很有用的. 先回顾队列的定义:队列(queue)维护了一组对象,进入队列的对象被放置在尾部,下一个被取出的元素则取自队列的首部.priority_queue特别之处在于,允许用户为队列中存储的元素设置优先级.这种队列不

【C/C++学院】0828-STL入门与简介/STL容器概念/容器迭代器仿函数算法STL概念例子/栈队列双端队列优先队列/数据结构堆的概念/红黑树容器

STL入门与简介 #include<iostream> #include <vector>//容器 #include<array>//数组 #include <algorithm>//算法 using namespace std; //实现一个类模板,专门实现打印的功能 template<class T> //类模板实现了方法 class myvectorprint { public: void operator ()(const T &

STL容器及适配器

STL容器   1.序列式容器 : vector,deque,list. 每个元素都有固定的位置(取决于插入的时机和位置,与元素值无关). vector 特点: 将一个元素置于一个动态数组中加以管理,可以随机存取元素.在数组尾部添加或删除元素非常快速,但是在中部或头部插入或删除元素比较耗时. deque "double-ended queue" 双端队列,可以随机存取.数组尾部或头部添加或删除元素非常快速,但在中部插入或删除元素比较费时.实际上,deque 是对vector 和list

C++ STL容器底层机制

1.vector容器 vector的数据安排以及操作方式,与array非常相似.两者的唯一区别在于空间的运用的灵活性.array是静态空间,一旦配置了就不能改变.vector是动态空间,随着元素的加入,它的内部机制会自行扩充空间以容纳新元素.因此,vector的运用对于内存的合理利用与运用的灵活性有很大的帮助,我们再也不必因为害怕空间不足而一开始要求一个大块的array. vector动态增加大小,并不是在原空间之后持续新空间(因为无法保证原空间之后尚有可供配置的空间),而是以原大小的两倍另外配