C++_STL---priority_queue

priority_queue的相关介绍

  1. 优先级队列是一种容器适配器,根据严格的排序标准,它的第一个元素总是它所包含的元素中最大(小)的。
  2. 该容器适配器类似于堆,在堆中可以随时插入元素,并且可以检索最大(小)堆元素(优先级队列中位于顶部的元素)。
  3. 优先级队列被实现为容器适配器,容器适配器即 将特定容器类封装作为其底层容器类,queue提供一组特定的成员函数来访问其元素。元素从特定容器的“尾部”弹出,其称为优先级队列的顶部。
  4. 底层容器可以是任何标准容器类模板,也可以是其他特定设计的容器类。容器应可以通过随机访问迭代器访问。
  5. 标准容器类vector和deque皆满足这些需求。默认情况下,如果没有为特定的priority_queue类实例化指定容器类,则使用vector。

更多关于priority_queue的详细内容,请点击priority_queue的文档介绍

priority_queue的使用

优先级队列默认使用vector作为其底层存储数据的容器,在vector上又使用了堆算法将vector中元素构造成堆的结构,因此priority_queue就是堆,所有需要用到堆的位置,都可以考虑使用priority_queue。注意:默认情况下priority_queue是大堆。 

函数声明接口说明

priority_queue()

priority_queue(InputIterator first, InputIterator last)

无参构造

迭代器区间初始化构造

empty()检查优先级队列是否为空
top()返回优先级队列中最大(最小元素),即堆顶元素
push(x)在优先级队列中插入元素x
pop()删除优先级队列中最大(最小)元素,即堆顶元素
// 使用举例(和queue类似)
int arr[] = { 3,2,7,6,0,4,1,9,8,5 };
// 迭代器区间初始化
priority_queue<int> pq1(arr, arr + sizeof(arr) / sizeof(arr[0]));while (!pq1.empty())              // 判断优先级队列是否为空
{cout << pq1.top() << " ";     // 获取栈顶元素pq1.pop();                    // 删除元素
}
cout << endl;
// 结果为:9,8,7,6,5,4,3,2,1,0 

上述代码结果默认是大堆(降序),其默认仿函数为less(),若想得到升序序列,只需改变仿函数为greater()即可。

// 改变仿函数
priority_queue<int, vector<int>, greater<int>> pq1(arr, arr + sizeof(arr) / sizeof(int));

priority_queue的底层实现

ps.  默认情况下,创建的是大堆,其底层按照小于号比较

// 迭代器区间初始化
priority_queue(InputIterator first, InputIterator last)
{while (first != last){_con.push_back(*first);++first;}//建堆for (int i = (_con.size() - 1 - 1) / 2; i >= 0; i--){AdjustDown(i); //向下调整算法}
}
// 向上调整算法
void AdjustUp(int child)
{int parent = (child - 1) / 2;while (child > 0){// 使用仿函数if (_comFunc(_con[parent], _con[child])){swap(_con[parent], _con[child]);child = parent;parent = (child - 1) / 2;}elsebreak;}
}
// 插入
void push(const T& x)
{_con.push_back(x);AdjustUp(_con.size() - 1);
}
// 向下调整算法
void AdjustDown(int parent)
{size_t child = parent * 2 + 1;while (child < _con.size()){// 使用仿函数if (child + 1 < _con.size() && _comFunc(_con[child], _con[child + 1])){++child;}if (_comFunc(_con[parent], _con[child])){swap(_con[parent], _con[child]);parent = child;child = parent * 2 + 1;}elsebreak;}
}
//删除
void pop()
{swap(_con[0], _con[_con.size() - 1]);_con.pop_back();AdjustDown(0);
}

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

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

相关文章

等保2.0中还有哪些针对云计算的安全要求?

等保2.0中针对云计算的安全要求概述 等保2.0是中国信息安全等级保护制度的升级版&#xff0c;它对云计算环境提出了一系列特定的安全要求&#xff0c;以确保云服务的安全性和合规性。以下是一些关键的云计算安全扩展要求&#xff1a; 基础设施位置&#xff1a;要求云计算基础…

内涵:日常工作中docker的常用知识

内涵&#xff1a;日常工作中docker的常用知识 1. docker高频指令&#xff08;与参数&#xff09;2. 单docker使用场景3.双&#xff08;多&#xff09;docker使用场景 正如 优雅&#xff1a;从系统环境到依赖包的管理&#xff0c;最近工作中&#xff0c;对开发、部署环境中的管…

电子画册制作的小秘密都在这篇文章了

电子画册作为现代营销和展示的重要工具&#xff0c;已经成为各类企业和个人宣传品的首选。相比传统印刷画册&#xff0c;电子画册不仅节省成本&#xff0c;还能通过多媒体元素增强视觉冲击力&#xff0c;提升用户互动体验。本文将介绍电子画册制作的基础步骤和关键要点&#xf…

电气-伺服(4)CANopen

一、CAN Controller Area Network ,控制器局域网&#xff0c;80年的德国Bosch的一家公司研发可以测量仪器直接的实时数据交换而开发的一款串行通信协议。 CAN发展历史 二、CAN 的osi 模型 CAN特性&#xff1a; CAN 的数据帧 三、CANopen 什么是CANopen CANopen 的网络模型 …

Unity In App Purchasing内购校验

1&#xff0c;利用收据验证混淆器 把后台的key填进去&#xff0c;点击自动生成一些文件 2&#xff0c;代码过滤 using UnityEngine.Purchasing.Security;在IAPManager.cs的 public PurchaseProcessingResult ProcessPurchase(PurchaseEventArgs e)增加 #if !UNITY_EDITOR…

【C++之unordered_set和unordered_map的模拟实现】

C学习笔记---025 C之unordered_set和unordered_map的模拟实现1、unordered_set的模拟实现2、unordered_map的模拟实现 C之unordered_set和unordered_map的模拟实现 前言&#xff1a; 前面篇章学习了C对unordered_set和unordered_map的认识和应用&#xff0c;接下来继续学习&am…

Java_网络通信:TCP和UDP

1、区别 TCP Transfer Control Protocol 是一种面向连接的、可靠的、传输层通信协议。 ​ 特点&#xff1a; 好比是打电话&#xff1a;面向连接的&#xff0c;点对点的通信&#xff0c;高可靠的&#xff0c;效率比较低&#xff0c;占用的系统资源比较多。 UDP User Datagram…

香橙派AIpro如何赋能AI+边缘流媒体设备

文章目录 &#xff08;一&#xff09;前言&#xff08;二&#xff09;AI边缘流媒体设备展示&#xff08;三&#xff09;赋能AI边缘流媒体设备1、准备开发环境2、在板子中下载编译安装SRS3、基本推拉流测试4、多路推流性能测试 &#xff08;四&#xff09;一些注意事项1、开发板…

ESP32-C3模组上跑通MD5(3)

接前一篇文章:ESP32-C3模组上跑通MD5(2) 本文内容参考: ESP32 MD5 代码_esp32 idf md5开启-CSDN博客 ESP32学习笔记(47)——加密算法AES/MD5/SHA_esp32 aes-CSDN博客 特此致谢! 上一回解析了ESP-IDF中组件(components)中MD5相关的例程,也给出了笔者参照该例程自行…

springboot 篮球馆管理系统-计算机毕业设计源码21945

目 录 摘要 1 绪论 1.1选题背景 1.2研究意义 1.3论文结构与章节安排 2 篮球馆管理系统系统分析 2.1 可行性分析 2.1.1 技术可行性分析 2.1.2 经济可行性分析 2.1.3 法律可行性分析 2.2 系统功能分析 2.2.1 功能性分析 2.2.2 非功能性分析 2.3 系统用例分析 2.4 …

【笔记】字符串相似度代码分享

目录 一、算法介绍1、算法1&#xff09;基于编辑距离2&#xff09;基于标记3&#xff09;基于序列4&#xff09;基于压缩5&#xff09;基于发音6&#xff09;简单算法 2、安装 二、代码demo1、Hamming 距离2、Levenshtein 距离3、Damerau-Levenshtein距离4、Jaro 相似度5、Jaro…

ctfshow sql注入

开启其他注入 web221 limit注入 给出查询语句 以及过滤逻辑为空 获取数据库名即可 limit 用于控制返回结果行数 limit后面似乎只能跟PROCEDURE ANALYSE( ) 函数了 PROCEDURE ANALYSE( ) 函数用于分析查询结果的函数 参数是用来控制函数的 这个参数的位置 可以放入报错函数 原…

MySQL—创建查看删除备份恢复数据库

创建数据库 创建数据库 LLF_DB01CREATE DATABASE LLF_DB01删除数据库DROP DATABASE LLF_DB01创建一个使用utf8字符集的数据库并带校对规则的数据库CREATE DATABASE hsp_db03 CHARACTER SET utf8 COLLATE utf8_bin 查看、删除数据库 显示所有的数据库SHOW DATABASES显示数据库…

AI PC(智能电脑)技术分析

一文看懂AI PC&#xff08;智能电脑&#xff09; 2024年&#xff0c;英特尔、英伟达等芯片巨头革新CPU技术&#xff0c;融入AI算力&#xff0c;为传统PC带来质的飞跃&#xff0c;引领智能计算新时代。 2024年&#xff0c;因此被叫作人工智能电脑&#xff08;AI PC&#xff09;…

归一化(normalization)

归一化是指对数据进行标准化处理&#xff0c;使其均值为0&#xff0c;方差为1&#xff0c;从而消除不同特征量纲的影响&#xff0c;使得不同特征之间可以进行比较和计算。对于时间序列数据&#xff0c;归一化的目的是减弱非平稳性&#xff0c;使得模型能够更好地学习数据的规律…

2024 年第十四届 APMCM 亚太地区大学生数学建模竞赛B题超详细解题思路+数据预处理问题一代码分享

B题 洪水灾害的数据分析与预测 亚太中文赛事本次报名队伍约3000队&#xff0c;竞赛规模体量大致相当于2024年认证杯&#xff0c;1/3个妈杯&#xff0c;1/10个国赛。赛题难度大致相当于0.6个国赛&#xff0c;0.8个妈杯。该比例仅供大家参考。 本次竞赛赛题难度A:B:C3:1:4&…

C语言程序是怎么在计算机中运行起来的

hello.c #include <stdio.h>int main(){printf("hello,world\n");return 0; }这段 C语言程序的代码能被编程人员读懂&#xff0c;但是计算机系统读不懂。C语言、C、java 这些高级编程语言本质上还是人类用的语言而不是计算机用的语言。 为了能在计算机上运行这…

无忧易售功能:刊登页面文本翻译,无缝对接全球买家

每一个词语&#xff0c;每一句话&#xff0c;都承载着产品的灵魂和品牌的故事&#xff0c;无忧易售的刊登页面文本翻译服务&#xff0c;一键操作即可将你的产品介绍、详情或广告文案转化为多语言版本&#xff0c;轻松管理&#xff0c;高效发布。 一、Allegro、OZON、Coupang、…

第7章:Electron文件系统操作(2)

7.2 文件对话框 Electron 提供了 dialog 模块用于显示文件打开和保存对话框。 7.2.1 显示文件打开对话框 主进程代码&#xff1a; const { app, BrowserWindow, ipcMain, dialog } require(electron); const path require(path);let mainWindow;const createMainWindow …

盘点2024年最新鼠标连点器推荐

电脑鼠标连点器是一种可以帮助用户自动化点击操作的小工具&#xff0c;广泛应用于游戏、自动化办公和测试等领域。选择一款合适的鼠标连点器能够提高工作和娱乐的效率&#xff0c;避免重复点击带来的疲劳。小编将为您介绍电脑鼠标连点器的产品特点、推荐几款实用的鼠标连点器并…