C++ priority_queue 的使用

news2024/11/27 16:38:06

1. priority_queue 的介绍

下面是 priority_queue 的介绍,来自于:🏹priority_queue - C++ Reference (cplusplus.com) 的中文翻译,您可以尝试看看。

  1. 优先队列是一种容器适配器,根据严格的弱排序标准,它的第一个元素总是它所包含的元素中最大的。
  2. 此上下文类似于堆,在堆中可以随时插入元素,并且只能检索最大堆元素(优先队列中位于顶部的元 素)。
  3. 优先队列被实现为容器适配器,容器适配器即将特定容器类封装作为其底层容器类,queue 提供一组特 定的成员函数来访问其元素。元素从特定容器的“尾部”弹出,其称为优先队列的顶部。
  4. 底层容器可以是任何标准容器类模板,也可以是其他特定设计的容器类。容器应该可以通过随机访问迭 代器访问,并支持以下操作:
    • empty():检测容器是否为空。
    • size():返回容器中有效元素个数。
    • front():返回容器中第一个元素的引用。
    • push_back():在容器尾部插入元素

2. 大堆与小堆

前面的介绍部分已经指明,priority_queue 就是一个堆哈!既然是堆,自然分为大堆与小堆,而我们的 priority_queue 默认是一个大堆哈!

大堆:每个结点的值都大于或等于其左右孩子结点的值。

小堆:每个结点的值都小于或等于其左右孩子结点的值。

这是关于堆这种数据结构较为详细的讲解:C语言数据结构初阶(11)----堆_姬如祎的博客-CSDN博客

下面我也会做一个简单的复习的!

#include<iostream>
#include<queue>
using namespace std;

int main()
{
	priority_queue<int> heap;
	heap.push(1);
	heap.push(2);
	heap.push(3);
	heap.push(4);
	heap.push(5);
	heap.push(6);
	heap.push(7);
	return 0;
}

我们写了上面的代码,向一个大堆中插入了几个数字,那么堆在底层的物理结构与逻辑结构是什么样的呢?

在这里插入图片描述

2.1 priority_queue 构建大堆与小堆

构建大堆:priority_queue<int> heap

构建小堆:priority_queue<int, vector<int>, greater<int>> heap

不用问为什么哈,到模拟实现 priority_queue 你就明白了。

3. priority_queue 接口使用

3.1 void push(const T& val)

这个函数是往堆中插入一个数据,然后经过向上调整算法,使得插入数据后的数组依然满足堆的逻辑结构。向上调整算法会在 priority_queue 的模拟实现中讲到。

3.2 void pop()

这个函数用来删除堆顶的元素。
在这里插入图片描述

3.3 T& top()

这个函数可以用来获取堆顶的元素。

3.4 size_t size()

这个函数可以获取堆中数据的个数。

3.5 bool empty()

这个函数可以用来判断一个堆是否为空。

#include<iostream>
#include<queue>
using namespace std;

int main()
{
    // 这是一个大堆
	priority_queue<int> heap;
	heap.push(1);
	heap.push(2);
	heap.push(3);
	heap.push(4);
	heap.push(5);
	heap.push(6);
	heap.push(7);

	cout << heap.top() << endl; //输出:7
    
    cout << heap.size() << endl; //输出:7
    
    heap.pop();

    cout << heap.size() << endl; //输出:6
    
    cout << heap.empty() << endl; //输出:0
    
	return 0;
}

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1146399.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

H5游戏分享-烟花效果

<!DOCTYPE html> <html dir"ltr" lang"zh-CN"> <head> <meta charset"UTF-8" /> <meta name"viewport" content"widthdevice-width" /> <title>点击夜空欣赏烟花</title> <sc…

WIN11新版画图问题解决

1 白色背景被连同删除的问题 解决方法&#xff1a;加层 将层调整为新建的层&#xff0c;在这个层下画图就行。 2 QQ截图无法直接放在画图上的问题 使用QQ截图的时候&#xff1a; 解决方法&#xff1a;使用windows自带的截图工具 步骤&#xff1a; 1. 使用快捷键winshifts 2.…

矢量图形编辑软件illustrator 2023 mac中文软件特点

illustrator 2023 mac是一款矢量图形编辑软件&#xff0c;用于创建和编辑排版、图标、标志、插图和其他类型的矢量图形。 illustrator 2023 mac软件特点 矢量图形&#xff1a;illustrator创建的图形是矢量图形&#xff0c;可以无限放大而不失真&#xff0c;这与像素图形编辑软…

Spring是如何解决bean循环依赖的问题的

在Spring框架中&#xff0c;循环依赖是指两个或多个Bean之间相互依赖&#xff0c;形成了一个闭环的依赖关系。当存在循环依赖时&#xff0c;Bean的创建过程会陷入死循环&#xff0c;导致应用程序无法启动或出现异常。 说到循环依赖&#xff0c;首先我先说说bean的三级缓存 在S…

【windows 脚本】netsh命令

netsh 是 Windows 操作系统中的一个命令行工具&#xff0c;用于配置和管理网络设置。它提供了一系列的命令和参数&#xff0c;可以用于配置网络接口、防火墙、路由表等网络相关的设置。以下是一些常用的 netsh 命令和用法&#xff1a; 配置静态IP&#xff0c;IP地址、子网掩码和…

python画图之颜色标尺

目录 带有颜色标尺的散点图带有颜色标尺的热图显示具体数值不显示具体数值 带有颜色标尺的轮廓图 在画图的时候加上颜色标尺可以非常方便看出数据的动态变化。以下是几个使用Python中常见的数据可视化库&#xff08;Matplotlib和Seaborn&#xff09;创建带有颜色标尺的图表的示…

震惊! 全方位解释在测试眼里,什么是需求?为什么要有需求?深入理解需求——图文并茂,生活举例,简单好理解

1、什么是需求&#xff1f; 需求定义(官方) 满足用户期望或正式规定文档&#xff08;合同、标准、规范&#xff09;所具有的条件和权能&#xff0c;包含用户需求和软件需求 用户需求&#xff1a;可以简单理解为甲方提出的需求&#xff0c;如果没有甲方&#xff0c;那么就是终端…

阿里云创建站点后如何制作网站

前言 链接: 如何用云服务器搭建网站、多个站点&#xff08;不使用域名仅用公网IP&#xff09; 这是之前我所写的如何利用阿里云服务器搭建站点&#xff0c;那么这篇文章就继续教大家如何制作网站&#xff0c;也算不上制作吧&#xff0c;就是导入网站模板。 文章目录 前言1.准备…

至高直降3000元,微星笔记本双11爆款推荐、好评有礼拿到手软

今年双11来的更早一些&#xff0c;微星笔记本先行的第一波雷影17促销活动&#xff0c;就已经领略到玩家们满满的热情。开门红高潮一触即发&#xff0c;微星笔记本双11活动周期至高直降3000元&#xff0c;众多爆款好货已经开启预约预售&#xff1a;有硬核玩家偏爱的性能双雄&…

【WinForm详细教程三】WinForm中的NumericUpDown、PictureBox、RichTextBox及三种Timer控件

文章目录 1. NumericUpDown2. PictureBox3.RichTextBox控件4. Timer 、System.Timers.Timer和System.Threading.Timer 计时器4.1 Timer4.2 System.Timers.Timer4.3 System.Threading.Timer 1. NumericUpDown NumericUpDown 控件是一个用于数字输入和显示的控件&#xff0c;通常…

freeRTOS学习day5

测试demo 创建两个任务 任务一 按键按下 释放二值信号量 任务二获取 并打印执行次数 #include "sys.h" #include "delay.h" #include "usart.h" #include "led.h" #include "FreeRTOS.h" #include "task.h" #in…

iis前端代理后台tomcat

1)tomcat服务器配置运行好&#xff0c;服务地址位于 localhost:8080/wechat 2)iis 绑定了域名 api.abc.com 希望访问 api.abc.com/wechat时&#xff0c;实际由tomcat的服务处理; 3)iis上需要添加组件 requestRouter_amd64.msi rewrite_amd64_zh-CN.msi 4)iis进行相关配置…

皮卡搜索-阿里夸克百度网盘资源超级搜索引擎

https://www.pikaso.top INDEX_SEARCH_CTA 少儿 小学 初中 高中 大学 四六级 考研 考公 教资 英语 电影 动漫 美剧 软件 电子书 编程 剪辑 设计 聚合云盘搜索接口地址&#xff1a;https://www.pikaso.top/search/?q%s% 阿里云盘搜索接口地址&#xff1a;https://www.pikaso.…

博彦科技:以金融为起点,凭借创新技术平台真打实干

【科技明说 &#xff5c; 重磅专题】 成立于1995年的博彦科技&#xff0c;已有28年左右的发展历程。 我没有想到&#xff0c;博彦科技也对AIGC领域情有独钟。博彦科技自研的数字人产品SaaS平台&#xff0c;可以接入包括百度文心一言、阿里通义千问等AI大模型产品。可见&#…

8.多线程之阻塞队列

阻塞队列和生产者消费者模型 文章目录 阻塞队列和生产者消费者模型1. 阻塞队列2. Java标准库中的阻塞队列 - BlockingQueue3. 阻塞队列的实现4. 生产者消费者模型 1. 阻塞队列 阻塞队列是什么呢&#xff1f;阻塞队列是一种特殊的队列&#xff0c;满足队列的基本要求 - 先进先出…

CMake学习教程(一)

前言 看到陈皓大神写作的《跟我一起写 Makefile》&#xff0c;我也想出一个CMake学习的专栏。 距离我接触CMake已经过了3年&#xff0c;那是我还是研一&#xff0c;不懂得底层编译的事情&#xff0c;因为导师的项目才突然转到这个方向&#xff08;项目是做工业软件的&#xf…

问题 R: 超级楼梯(递推,基础DP)查表

得到递推表达式&#xff1a; f(1)0&#xff0c;因为开始就站在第1级台阶上&#xff1b; f(2)1&#xff0c;只能从第1级台阶上1级&#xff1b; f(3)2&#xff0c;只能从第1级台阶上2级&#xff0c;或只能从第2级台阶上1级&#xff1b; f(n)f(n-2)f(n-1)&#xff0c;n>3 …

Linux学习第25天:Linux 阻塞和非阻塞 IO 实验(二): 挂起

Linux版本号4.1.15 芯片I.MX6ULL 大叔学Linux 品人间百味 思文短情长 为方便和上一节的衔接&#xff0c;在正式开始学习前&#xff0c;先把本节的思维导图引入&#xff1a; 二、阻塞IO实验 1.硬件原理图分析 2.实验程序 #define I…

Linux两条服务器实现相互免密登录

1.准备两台虚拟机&#xff0c;一台充当服务器端&#xff08;server&#xff09;&#xff0c;一台充当客户端&#xff08;client&#xff09; 服务器端&#xff08;server&#xff09;&#xff1a;192.168.75.139 客户端&#xff08;client&#xff09;&#xff1a;192.168.75…

腾讯云和阿里云双11优惠大战,服务器价格相差1块钱?

2023双十一优惠活动来了&#xff0c;同配置轻量应用服务器2核2G3M带宽&#xff0c;阿里云87元一年&#xff0c;腾讯云88元一年&#xff0c;阿里云不限制月流量&#xff0c;腾讯云限制200GB月流量&#xff0c;阿里云系统盘是50GB高效云盘&#xff0c;腾讯云是40GB SSD云硬盘&…