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

需要的库

#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. VM中linux和windows主机进行串口通信

    最近在做关于AIS的内容.为了对AIS电文进行解码,串口收发. 数据有PC机模拟发送,为了调试方便,不用次次将程序放到开发板上运行,所以利用pc主机和虚拟机进行串口通信模拟该过程. 首先需要用到一个软 ...

  2. 你真的懂printf么?

    自从你进入程序员的世界,就开始照着书本编写着各种helloworld,大笔一挥: printf("Hello World!\n"); 于是控制台神奇地出现了一行字符串,计算机一句温 ...

  3. python代码检查工具pylint 让你的python更规范

    1.pylint是什么? Pylint 是一个 Python 代码分析工具,它分析 Python 代码中的错误,查找不符合代码风格标准(Pylint 默认使用的代码风格是 PEP 8,具体信息,请参阅 ...

  4. Python魔法方法__getattr__和__getattribute__详解

    在Python中有这两个魔法方法容易让人混淆:__getattr__和getattribute.通常我们会定义__getattr__而从来不会定义getattribute,下面我们来看看这两个的区别. ...

  5. abp(net core)+easyui+efcore仓储系统——创建应用服务(五)

    abp(net core)+easyui+efcore仓储系统目录 abp(net core)+easyui+efcore仓储系统——ABP总体介绍(一) abp(net core)+easyui+e ...

  6. python网络爬虫(10)分布式爬虫爬取静态数据

    目的意义 爬虫应该能够快速高效的完成数据爬取和分析任务.使用多个进程协同完成一个任务,提高了数据爬取的效率. 以百度百科的一条为起点,抓取百度百科2000左右词条数据. 说明 参阅模仿了:https: ...

  7. 关于Git GUI的使用方式

    1.选择Clone Existing Repository 2.选择clone地址和存放位置,然后clone 3失败 4如果失败,让对方去这里(github的界面)邀请下,如果是自己就不用 5然后等待 ...

  8. webpack-simple之vagrant热加载

    "dev": "cross-env NODE_ENV=development webpack-dev-server --host 192.168.2.10 --port ...

  9. 长春理工大学第十四届程序设计竞赛(重现赛)L

    L.Homework Stream 题目链接:https://ac.nowcoder.com/acm/contest/912/L 题目 作为大珩班尖子生,小r每天有很多作业要完成,例如工图.工图和工图 ...

  10. 1. VMware搭建Linux环境,安装配置centos6.5

    1. 安装VMware,后新建虚拟机 2. 为我们的虚拟机挂载操作系统 3.开启我们的虚拟机,为我们的虚拟机进行安装操作系统 4.配置虚拟机连接网络 修改linux的mac地址 修改mac地址配置文件 ...