SiriBlog

siriyang的个人博客


  • 首页

  • 排行榜

  • 标签115

  • 分类37

  • 归档320

  • 关于

  • 搜索

STL常用模板:PriorityQueue优先队列

发表于 2020-01-06 更新于 2021-10-29 分类于 计算机 , 技术 , C/C++ 阅读次数: Valine:
本文字数: 1.7k 阅读时长 ≈ 2 分钟

C/C++参考文档

概念

  C++优先队列类似队列,具有队列的所有特性,包括基本操作,只是在这基础上添加了内部的一个排序,它本质是一个堆实现的,使优先级高的排在前面,优先出列。

头文件

1
#include <queue>

名字空间

1
std

构造函数

定义:

1
priority_queue<Type, Container, Functional>

  Type 就是数据类型,Container 就是容器类型(Container必须是用数组实现的容器,比如vector,deque等等,但不能用 list。STL里面默认用的是vector),Functional 就是比较的方式,当需要用自定义的数据类型时才需要传入这三个参数,使用基本数据类型时,只需要传入数据类型,默认是大顶堆。

基本类型构造:
  如果我们把后面俩个参数缺省的话,优先队列就是大根堆,队头元素最大。

1
2
3
4
5
6
//大根堆,降序队列
priority_queue<int> Q1;
priority_queue <int,vector<int>,less<int> > Q2;

// 小根堆,升序队列 ↓这里一定要有空格,不然成了右移运算符
priority_queue<int, vector<int>, greater<int> > Q3;

  greater和less是std实现的两个仿函数(就是使一个类的使用看上去像一个函数。其实现就是类中实现一个operator(),这个类就有了类似函数的行为,就是一个仿函数类了)

结构体构造:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28

//方法1
struct tmp1{

//你要用的数据
int val;

//初始化函数,方便构造
tmp1(int v):val(v){};

//重载'<'运算符(且只能重载'<'),根据自己的需求进行排序,最终实现优先级从高到低的排序
bool operator < (const tmp1 &rhs) const {
return val < rhs.val;//返回true则表示this优先级比rhs低,往后排,false反之
}
}

//方法2
struct tmp2{ //重写仿函数
bool operator() (tmp1 a, tmp1 b)
{
return a.x < b.x; //大顶堆
}
};

...

priority_queue<tmp1> Q1;
priority_queue<tmp1, vector<tmp1>, tmp2> Q2;

常用函数

empty

语法:

1
bool empty();

  empty()函数返回真(true)如果优先队列为空,否则返回假(false)。


pop

语法:

1
void pop();

  pop()函数删除优先队列中的第一个元素。


push

语法:

1
void push( const TYPE &val );

  push()函数添加一个元素到优先队列中,值为val。


size

语法:

1
size_type size();

  size()函数返回优先队列中存储的元素个数。


top

语法:

1
TYPE &top();

  top()返回一个引用,指向优先队列中有最高优先级的元素。注意只有pop()函数删除一个元素。

参考资料
  • c++优先队列(priority_queue)用法详解
-------- 本文结束 感谢阅读 --------
相关文章
  • STL常用模板:MultiSet多元集合
  • STL常用模板:MultiMap多元字典
  • STL常用模板:Map字典
  • STL常用模板:Bitset位集合
  • STL常用模板:Double Ended Queue双向队列
觉得文章写的不错的话,请我喝瓶怡宝吧!😀
SiriYang 微信支付

微信支付

SiriYang 支付宝

支付宝

  • 本文标题: STL常用模板:PriorityQueue优先队列
  • 本文作者: SiriYang
  • 创建时间: 2020年01月06日 - 22时01分
  • 修改时间: 2021年10月29日 - 18时10分
  • 本文链接: https://blog.siriyang.cn/posts/20200106225519id.html
  • 版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!
C/C++ 文档 STL
STL常用模板:Queue队列
CCF-CSP:201709-2公共钥匙盒
  • 文章目录
  • 站点概览
SiriYang

SiriYang

努力搬砖攒钱买镜头的摄影迷
320 日志
33 分类
88 标签
RSS
GitHub E-Mail
Creative Commons
Links
  • 友情链接
  • 作品商铺

  1. 概念
  2. 构造函数
  3. 常用函数
    1. empty
    2. pop
    3. push
    4. size
    5. top
蜀ICP备19008337号 © 2019 – 2025 SiriYang | 1.7m | 25:41
0%