今天做题用到了优先队列 对它的用法还不是很熟悉 现在整理一下。

需要的库

#include<queue>
using namespace std;

不过我都用bits/stdc++.h...

定义

priority_queue<Type, Container, Functional>

Type是数据的类型 比如int啊char啊之类的

Container是容器类型默认是vector

Functional是比较的方式  比如greater<int>   less<int>   或者自己定义的比较函数

具体用法

基本用法1

priority_queue <int> q;

这是最基本的用法 不需要像定义一样传三个参数进去 只需要声明一个数据类型即可

需要注意的是 优先队列是默认从大到小排的!

基本用法2

//升序队列
priority_queue <int,vector<int>,greater<int> > q;
//降序队列
priority_queue <int,vector<int>,less<int> >q;

因为声明了比较的方式,这次必须要传三个参数进去了

需要注意的是:

  • greater<int>  和 > 之间必须要有一个空格,不然是右移运算符!
  • greater是升序排列,也就是从小到大排,不是我们想当然的greater就是从大到小!(所以这里只需要记住 greater是升序 up up~ less是降序down down~ 这样比较符合正常人的认知,也好记~)

进阶用法1(运算符重载)

方法1 使用 friend bool operator

typedef struct node
{
int num;
friend bool operator < (const node & a,const node & b)
{
return a.num < b.num ;
}
}point;
 priority_queue<point>q;
 

这个方法是将运算符的重载在结构体的定义中完成,优先队列的的定义中就不需要传三个参数了 在这个小例子里看起来没什么用 不过解决复杂问题时,就需要采用结构体来设计数据结构 也就必须要告诉计算机,比较的方式。

需要注意的是:

  • 只能对小于号进行重载
  • 若想从小到大排 只需要将return语句的小于号改成大于号即可 和sort是正好反过来的!

方法2 使用 bool operator

typedef struct node
{
int num;
bool operator<(const node&b)const
{
return num<b.num;
}
}point; priority_queue<point>q;

和采用friend bool operator的方法1一样,只是写法略有不同 我不喜欢用 感觉乱乱的....

进阶用法2(重写仿函数)

struct node1
{
int x;
}; struct node2
{
bool operator() (node1 a, node1 b)
{
return a.x < b.x;
}
}; priority_queue<node1, vector<node1>, node2> p;

重写仿函数这个用起来真麻烦呀....需要声明两个结构体 不喜欢用....

支持的操作

  • top 访问队头元素
  • empty 队列是否为空
  • size 返回队列内元素个数
  • push 插入元素到队尾 (并排序)
  • emplace 原地构造一个元素并插入队列
  • pop 弹出队头元素
  • swap 交换内容

STL 优先队列 用法的更多相关文章

  1. STL 优先队列

    STL 栈,队列,优先队列用法 分类: Learning C++2013-11-15 00:52 843人阅读 评论(2) 收藏 举报 c++栈队列优先队列STL STL 中栈的使用方法(stack) ...

  2. STL vector用法介绍

    STL vector用法介绍 介绍 这篇文章的目的是为了介绍std::vector,如何恰当地使用它们的成员函数等操作.本文中还讨论了条件函数和函数指针在迭代算法中使用,如在remove_if()和f ...

  3. CJOJ 2484 函数最小值 / Luogu 2085 函数最小值(STL优先队列,堆)

    CJOJ 2484 函数最小值 / Luogu 2085 函数最小值(STL优先队列,堆) Description 有n个函数,分别为F1,F2,...,Fn.定义 \(Fi(x)=Aix^2+Bix ...

  4. CJOJ 2482 【POI2000】促销活动(STL优先队列,大根堆,小根堆)

    CJOJ 2482 [POI2000]促销活动(STL优先队列,大根堆,小根堆) Description 促销活动遵守以下规则: 一个消费者 -- 想参加促销活动的消费者,在账单下记下他自己所付的费用 ...

  5. 基于STL优先队列和邻接表的dijkstra算法

    首先说下STL优先队列的局限性,那就是只提供入队.出队.取得队首元素的值的功能,而dijkstra算法的堆优化需要能够随机访问队列中某个节点(来更新源点节点的最短距离). 看似可以用vector配合m ...

  6. poj 3253 Fence Repair (STL优先队列)

    版权声明:本文为博主原创文章,未经博主同意不得转载. vasttian https://blog.csdn.net/u012860063/article/details/34805369 转载请注明出 ...

  7. UVA - 136 Ugly Numbers(丑数,STL优先队列+set)

    Ugly numbers are numbers whose only prime factors are 2, 3 or 5. The sequence 1, 2, 3, 4, 5, 6, 8, 9 ...

  8. 合并果子(STL优先队列)

    STL优先队列:priority_queue 定义:priority_queue<int>q; 从小到大:priority_queue<int,vector<int>,g ...

  9. 日常笔记6C++标准模板库(STL)用法介绍实例

    一.vector常见用法详解 vector翻译为向量,但是这里翻译成变长数组的叫法更好理解. 如果typename是一个STL容器,定义的时候要记得在>>符号之间加上空格,因为在C++11 ...

随机推荐

  1. 基于SAP HANA平台的多团队产品研发

    工欲善其事必先利其器.要提高多团队的开发效率,而且还是在SAP HANA平台上,建议大家还是本着“慢就是快”的原则,不要急功近利,在没有准备好团队开发的架构时就匆忙开始功能的开发.匆忙功能开发就算了, ...

  2. Spring的Bean的生命周期

    一:生命周期执行的过程如下:1) spring对bean进行实例化,默认bean是单例.2) spring对bean进行依赖注入.3) 如果bean实现了BeanNameAware接口,spring将 ...

  3. Python连载8-datetime包函数介绍

    一.datetime包(上接连载7内容) 1.函数:datetime (1)用法:输入一个日期,来返回一个datetime类​ (2)格式:datetime.datetime(年,月,日,hour=, ...

  4. 【JRebel 作者出品--译文】Java class 热更新:关于对象,类,类加载器

    一篇大神的译文,勉强(嗯..相当勉强)地放在类加载器系列吧,第8弹: 实战分析Tomcat的类加载器结构(使用Eclipse MAT验证) 还是Tomcat,关于类加载器的趣味实验 了不得,我可能发现 ...

  5. .NET架构师知识普及

    今天看到一篇漫画,[3年.NET开发应聘大厂惨遭淘汰,如何翻身打脸面试官?],好多问题,一下子还真的回答不了,这里对这些问题进行了整理,增加下脑容量,哈哈.俗话说不想当将军的士兵不是好士兵,不想当架构 ...

  6. SFTP数据迁移

    背景 服务器部署到aliyun上,之前sftp数据又是在系统盘上,由于现在数据量越来越大,导致系统盘无法满足现有要求,所以需要对sftp相关数据进行迁移至数据盘. 方案 方案一:原数据复制到新磁盘中, ...

  7. Python 图片识别

    Tesseract是开源的OCR引擎. 需要安装tesserocr.opencv-python.tesseract-ocr pip install tesserocr pip install open ...

  8. 深度探索c++对象模型 第二章

    1,c++转换函数:显示转换和隐式转换. 隐式转换为程序员提供了很大的变量.比如整形提升,普通类型转换为类类型(operator int())都为程序带来无尽的方便.试想,如果没有整形提升,一个sho ...

  9. Python笔记【4】_字典学习

    #!/usr/bin/env/python #-*-coding:utf-8-*- #Author:LingChongShi #查看源码Ctrl+左键 ''' dict:字典以“{}”包围,以“键:值 ...

  10. PHP中var_dump、&&和GLOBALS的爱恨纠缠

    var_dump函数:用来打印显示一个变量的内容与结构: &&:定义一个可变变量.php中,在定义变量时,需要在前面加上一个“&”符号,当加上两个“&&”符号时 ...