[C++]priority_queue——优先级队列(含模拟实现)

一、priority_queue是什么

priority_queue 是容器适配器,它提供常数时间的(默认)最大元素查找,对数代价的插入与释出。

可用用户 提供的 Compare 更改顺序,例如,用 std::greater<T> 将导致最小元素作为 top() 出现。

用 priority_queue 工作类似管理某些随机访问容器中的堆,优势是不可能突然把堆非法化。

二、使用

priority_queue实际就是把优先级最高的一个数据放在最前面(大/小堆)。

#include<queue>
#include<iostream>
using namespace std;void test_pq()
{vector<int> v = { 0,8,7,1,9 };priority_queue<int> q(v.begin(), v.end());q.push(1);q.push(2);q.push(3);q.push(4);q.push(5);while (!q.empty()){cout << q.top() << endl;q.pop();}}int main()
{test_pq();return 0;
}

三、模拟实现

#include<iostream>
#include<vector>
#include<functional>namespace gu
{template <class T, class Container = vector<T>, class Compare = less<T> >class priority_queue{public:priority_queue(){}template <class InputIterator>priority_queue(InputIterator first, InputIterator last):c(first,last){for (int i = (c.size() - 2) / 2; i >= 0; i--){adjust_down(i);}}bool empty() const{return c.empty();}size_t size() const{return c.size();}const T& top(){return c[0];}void adjust_down(int parent){size_t child = parent * 2 + 1;while (child < c.size()){if (child + 1 < c.size() && comp(c[child ] , c[child + 1])){child++;}if (comp(c[parent], c[child])){swap(c[parent], c[child]);parent = child;child = child * 2 + 1;}else{break;}}}void adjust_up(int child){int parent = (child - 1) / 2;while (child > 0){if (comp(c[parent], c[child])){swap(c[child], c[parent]);child = parent;parent = (child - 1) / 2;}else{break;}}}void push(const T& x){c.push_back(x);adjust_up(c.size() - 1);}void pop(){swap(c[0], c[c.size() - 1]);c.pop_back();adjust_down(0);}private:Container c;Compare comp;};};

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

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

相关文章

【LeetCode: 135. 分发糖果 + 贪心】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

物联网IOT视频设备如何快速对接阿里云生活物联网(Link Visual)并成功上云?

原文永久更新地址&#xff1a;https://www.yundashi168.com/472.html 文章来源&#xff1a;猿视野 如果有图片看不清楚&#xff0c;加载不出来&#xff0c;请阅读原文。 什么是Link Visual、 Link Visual是生活物联网平台针对视频产品推出的增值服务&#xff0c;提供视频数据上…

HDFS的standby节点启动过慢原因分析以及应对策略

HDFS的standby节点启动过慢原因分析以及应对策略 1. NN启动大致流程2. Editlog日志清理策略2.1 为什么需要合并editlog&#xff1f;2.2 什么时候删除editlog&#xff1f; 3. NN启动的日志加载策略4. Standby启动慢应对策略5. 疑问和思考5.1 如何人工阅读editlog和fsimage文件的…

在windows安装python版本的tensorrt

文章目录 一、进入官网&#xff0c;下载tensorrt包二、下载后解压并把相应文件拷入对应cuda的文件夹2.1 拷贝头文件2.2 拷贝静态库2.3 拷贝动态库 三、安装whl文件四、验证 一、进入官网&#xff0c;下载tensorrt包 https://developer.nvidia.com/tensorrt-download 这里需要…

ElasticSearch的集群管理命令

ElasticSearch版本 {"name" : "data-slave1","cluster_name" : "data-es","cluster_uuid" : "xxxxxxxxxx-eMwxw","version" : {"number" : "7.2.1","build_flavor" : &…

QT 范例阅读:Vector Deformation

效果图&#xff1a; 主要代码&#xff1a; 实现放大镜效果QPainter painter;//两种方式if (1) {m_lens_image QImage(bounds.size(), QImage::Format_ARGB32_Premultiplied);m_lens_image.fill(0);painter.begin(&m_lens_image);} else {m_lens_pixmap QPixmap(bounds.si…

云手机哪一款好用?

随着海外市场的不断发展&#xff0c;云手机市场也呈现蓬勃的态势&#xff0c;众多云设备软件纷纷涌现。企业在选择云手机软件时&#xff0c;如何找到性能卓越的软件成为一项关键任务。在众多选择中&#xff0c;OgPhone云手机凭借其卓越的性能和独特功能脱颖而出。以下是OgPhone…

mysql5.7.19安装步骤

mysql5.7.19安装步骤 安装包&#xff1a; 1、mysql链接&#xff1a;https://pan.baidu.com/s/1SgL1hY9KzaABOFhWeFkkQg?pwdqndd 提取码&#xff1a;qndd 2、主要参考&#xff1a; https://www.cnblogs.com/iathanasy/p/8461429.html 如果遇到&#xff1a;【由于找不到msv…

C#在图片上输出文字和保存

winform&#xff0c;图片控件&#xff0c;加载一个图片&#xff0c;在图片上输出文字&#xff1b; 输出文字的代码如下&#xff1b; private void pictureBox1_Paint(object sender, PaintEventArgs e){Graphics g1 e.Graphics;g1.DrawString("测试", this.Font, B…

Mysql系列

1 MySQL设计表的三大范式是什么&#xff1f; MySQL设计表时遵循的三大范式是关系型数据库设计理论中的基本规范&#xff0c;它们确保了数据在数据库中的存储结构合理、无冗余且一致。以下是三大范式的详细介绍&#xff1a; 第一范式&#xff08;1NF&#xff1a;First Normal …

SpringBoot项目Jar包加密防止反编译详细讲解(值得珍藏)

1. 前言 本文将介绍如何对 SpringBoot 项目进行 Jar 包加密&#xff0c;以防止反编译。通过使用加密技术&#xff0c;可以保护源代码的安全性&#xff0c;防止恶意攻击者获取敏感信息和业务逻辑。本文将详细介绍加密方法、操作步骤和注意事项&#xff0c;并通过示例代码演示如…

搞定App关键词和评论

从关键词优化的三大基本概念走起&#xff01; 关联性 优化师一般如何选择关联性高的关键词呢&#xff1f; 主要思路如下&#xff1a;品牌词-关联词-竞品词-竞品关键词&#xff0c;优先级从前到后依次降低&#xff0c;通过ASO优化工具筛选出合适的关键词。做ASO有一个好处就是…

大型语言模型基础知识的可视化指南

直观分解复杂人工智能概念的工具和文章汇总 如今&#xff0c;LLM&#xff08;大型语言模型的缩写&#xff09;在全世界都很流行。没有一天不在宣布新的语言模型&#xff0c;这加剧了人们对错过人工智能领域的恐惧。然而&#xff0c;许多人仍在为 LLM 的基本概念而苦苦挣扎&…

8.16单调递增的数字(LC738-M)

算法&#xff1a; 拿一个两位的数字来举例。 例如&#xff1a;98&#xff0c;一旦出现strNum[i - 1] > strNum[i]的情况&#xff08;非单调递增&#xff09;&#xff0c;首先想让strNum[i - 1]--&#xff0c;然后strNum[i]给为9&#xff0c;这样这个整数就是89&#xff0c…

《动手学深度学习(PyTorch版)》笔记4.1

注&#xff1a;书中对代码的讲解并不详细&#xff0c;本文对很多细节做了详细注释。另外&#xff0c;书上的源代码是在Jupyter Notebook上运行的&#xff0c;较为分散&#xff0c;本文将代码集中起来&#xff0c;并加以完善&#xff0c;全部用vscode在python 3.9.18下测试通过。…

tf卡被格式化怎么恢复里面的数据?恢复指南在此

在日常生活中&#xff0c;我们经常使用TF卡来存储各种数据&#xff0c;如照片、视频、文档等。然而&#xff0c;有时候我们会误将TF卡格式化&#xff0c;导致其中的数据丢失。为了挽救这些宝贵的数据&#xff0c;我们需要采取一些措施来进行恢复。本文将为你介绍如何恢复TF卡中…

java中Collections的常用方法(三)

如何使用Collections类来计算集合中元素的出现次数&#xff1f; 在Java中&#xff0c;你可以使用Collections类中的frequency方法来计算集合中元素的出现次数。但是&#xff0c;Collections.frequency()方法并不直接属于Collections类&#xff0c;而是属于Collections工具类的…

最近一周没能完成任务 羞愧

反思了一下,许多失败的项目都是一年内没有维护的项目 还有的是一年内有维护,但是文档少的额可怜,官方文档就几行,按照官方文档操作确实跑不起来 这种项目运行起来总会各种问题 以后一年内不维护的项目 坚决不去接触,文档不全的也不去 浪费时间 浪费精力

华为二层交换机与防火墙配置上网示例

二层交换机与防火墙对接上网配置示例 组网图形 图1 二层交换机与防火墙对接上网组网图 二层交换机简介配置注意事项组网需求配置思路操作步骤配置文件相关信息 二层交换机简介 二层交换机指的是仅能够进行二层转发&#xff0c;不能进行三层转发的交换机。也就是说仅支持二层…

php中判断一维数组和多元数组中的元素是否相等并输出键值key

在php中&#xff0c;如何判断[1,0,1]和[ [0, 0, 0],//体质正常 [1, 0, 0],//气虚体质 [0, 1, 0],//血瘀体质 [0, 0, 1],//阴虚体质 [1, 1, 0],//气虚兼血瘀体质 [1, 0, 1],//气虚兼阴虚体质 [0, 1, 1],//血瘀兼阴虚体质 [1, 1, 1],//气虚兼血瘀兼阴虚体质 ];中的第n项相等&…