c++|priority_queue

news2024/11/24 5:45:07

priority_queue

  • 前置知识:仿函数
  • priority_queue的模拟实现

前置知识:仿函数

template<class T>
struct  Less
{
	bool operator()(const T& x, const T& y) // 
	{
		return x < y;
	}
};

在这里插入图片描述

priority_queue的模拟实现

通过对priority_queue的底层结构就是堆,因此此处只需对对进行通用的封装即可

template<class T>
struct  Less
{
	bool operator()(const T& x, const T& y) // 
	{
		return x < y;
	}
};
// 构造器 
template<class T, class Container = vector<T>,class compare = Less<T>>

class priority 
{
	Container container;
	compare com;
public:
	void adjust_up(size_t child)
	{
		while (child > 0) 
		{
			size_t parent = (child - 1) / 2;
			//if (container[parent] < container[child]) 
			if(com(container[parent],container[child]))
			{
				std::swap(container[parent], container[child]);
				child = parent;
				parent = (child - 1) / 2;
			}
			else 
			{
				break;
			}

		}
	}
	void push(const T& x) 
	{
		container.push_back(x);
		adjust_up(container.size() - 1);
	}
	T top() 
	{
		return container[0];
	}
	void adjust_down(size_t parent) 
	{
		size_t child = parent * 2 + 1;
		int n = container.size();
		while (child < n) 
		{
			//if (child + 1 < n && container[child + 1] > container[child]) child++;
		//	if (child + 1 < n && container[child]  <   container[child + 1]) child++;
			if (child + 1 < n && com(container[child], container[child + 1])) child++;
			//if (container[parent] < container[child]) 
			if(com(container[parent], container[child]))
			{
				std::swap(container[parent], container[child]);
				parent = child;
				child = parent * 2 + 1;
			}
			else 
			{
				break;
			}
		}
	}
	void pop() 
	{
		std::swap(container[0], container[container.size() - 1]);
		container.pop_back();
		adjust_down(0);

	}
	bool empty() 
	{
		return container.empty();
	}
};

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

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

相关文章

element ui表格动态合并方法

懒得上代码直接截图了 1. 这种方法适合所有合并项全部在一起的 2.还方法可以选择从哪一列开始合并&#xff0c;或者像目录一样从前往后合并

使用 Elastic AI assistant for Observability 来分析日志

在今天的文章中&#xff0c;我们来参考之前的文章 “Elastic AI Assistant for Observability 和 Microsoft Azure OpenAI 入门” 来使用 Elastic AI assistant 分析日志。在本文章中&#xff0c;我们不使用 Azure clould。这样我们之间来进入主题&#xff0c;以免失去注意力。…

Live800:提升客服服务质量,企业应从这几个方面下功夫

客户服务质量&#xff0c;是企业为客户提供优质服务的一个重要衡量指标。通常来说&#xff0c;一个企业的客服部门在其经营活动中发挥着重要作用&#xff0c;是客户与企业之间沟通的桥梁。良好的客服服务&#xff0c;不仅能够提高客户满意度&#xff0c;还能增强企业品牌的美誉…

pcd点云江湖之处处碰壁:点云文件pcd加载02

江湖好汉&#xff0c;休走&#xff0c;废了半天力气把threejs自带的代码搬迁到自己项目中了&#xff0c;高高兴兴给领导看。领导一句话&#xff0c;顿时无奈&#xff1a;领导曰&#xff1a;点云单色太丑&#xff0c;能不能按照分类展示&#xff1f; 一句话难道英雄好汉&#xf…

Redis主从、哨兵、cluster集群的部署和细节

目录 1. 主从模式 为什么需要主从&#xff1f; 搭建主从架构 2. Sentinel(哨兵)模式 为什么需要哨兵模式&#xff1f; 搭建哨兵集群 哨兵集群 Go语言编程redis哨兵模式 有了哨兵&#xff0c;客户端连接谁&#xff1f; test1&#xff1a;redis节点主从切换 test2&am…

linux内核memory model

一、背景   操作系统的一个重要功能就是管理计算机中的各种硬件资源&#xff0c;比如说CPU、内存、显存、串口等&#xff0c;其中内存是这些资源中很珍贵的部分&#xff0c;所以为了能把内存管理好做了很多工作。硬件内存架构是不停地发展变化的&#xff0c;内核中管理内存的…

Python 实现Word (DOC或DOCX)与TXT文本格式互转

目录 引言 安装Python库 使用Python将Word转换为TXT文本格式 使用Python将TXT文本格式转换为Word 引言 Word文档和TXT文本文件是日常工作和生活中两种常见的文件格式&#xff0c;各有其特点和优势。Word文档能够保留丰富的格式设置&#xff0c;如字体、段落、表格、图片等…

Flink 生态对 Confluent / Kafka Schema Registry 支持情况的研究报告

文章目录 1. Flink CDC 对 Confluent Schema Registry 的支持情况2. Confluent Avro Format 对 Confluent Schema Registry 的支持情况3. 关键性结论 这几年&#xff0c;在流式链路上引入一个 Schema Registry 变得越来越流行&#xff0c;也越来越有必要&#xff0c; Schema Re…

HX6203是一个完整的电池充电器控制器的两个(8.4V)电池锂离子电池芯片IC

一般描述 该HX6203是一个完整的电池充电器控制器的两个(8.4V)电池锂离子电池。HX6203为快速充电锂离子电池提供了一种小巧、简单、高效的解决方案。一个外部检测电阻以高精度设置充电电流。 内部电阻分压器和精密参考设置的最终浮动电压为8.4V时&#xff0c;输入…

宁盾与深信服发布联合方案,解决云桌面及微软AD完整替代

自 Citrix 退出中国市场后&#xff0c;不少中大型企业关心国产云桌面脱离微软 AD 域是否还能正常工作。在2024年3月初&#xff0c;宁盾身份目录与深信服桌面云完成兼容互认证&#xff0c;对于企业的疑问给出了官方回应。 5月10日&#xff0c;在深信服《Citrix离场背景下&#…

草图大师2024怎么保存低版本呢?插件怎么写?

草图大师是一款流行的绘图和设计软件&#xff0c;为了向后兼容&#xff0c;保存低版本文件时&#xff0c;可以采取以下步骤&#xff1a; su模型库 1.另存为旧版本格式&#xff1a; 在保存文件时&#xff0c;草图大师通常会提供一个选项&#xff0c;让你选择要保存的文件格式和…

plsql 学习

过程化编程语言 赋值&#xff1a;&#xff1a; ||&#xff1a;连接符号 dbms_output.put_line() :输出的语句 var_name ACCOUNTLIBRARY.USERNAME%type; 变量名&#xff1b;某个表的数据类型&#xff1b;赋值给变量名 用下面的方法更好用 异常exception 循…

Mixiy(米思齐)安装

Mixiy(米思齐)安装 官网地址&#xff1a;爱上米思齐 打开官网&#xff0c;选择下图的软件进行下载 复制提取码&#xff0c;点击链接跳转到网盘进行下载&#xff0c;选择(RC4完整版) 下载完成后&#xff0c;解压到合适的位置&#xff0c;进入文件夹&#xff0c;双击Mixly.exe即…

小程序的深层了解

一:wxss的全局样式和局部样式 写在文件上,第一个路径会执行全局和局部自带的wxss给wxml,会执行wxml,会执行json和js. 无论那个文件都会执行文件夹内的和外部的app.wxss,但是如果有一样的属性,则看属性的权重,权重一样,则设置局部样式. 二:全局配置 wx:key"写的是data内…

实操专区-第13周-课堂练习专区-折线图和阶梯图

实操专区-第13周-课堂练习专区-折线图和阶梯图 下载安装ECharts&#xff0c;完成如下样式图形。 代码和截图上传 基本要求&#xff1a;下图2选1&#xff0c;完成代码和截图 完成 3.1.3.12 折线图和阶梯图中的任务点 基本要求&#xff1a;2个选一个完成&#xff0c;多做1个加2分…

Linux网络——TCP协议详细讲解

目录 前言 一、TCP报头格式 1.首部长度 2.窗口大小 3.序号与确认序号 4.标志位 4.1 PSH 4.2 RST 5.紧急指针 6.TCP检验和 二、超时重传 三、连接管理机制 四、滑动窗口 五、拥塞控制 六、延迟应答 七、为什么TCP这么复杂? 前言 前面我们学习了TCP协议套接字的…

DFS:解决二叉树问题

文章目录 了解DFS1.计算布尔二叉树的值思路代码展示 2.求根节点到叶节点数字之和思路代码展示 3.二叉树剪枝思路代码展示 4.验证二叉搜索树思路分析代码展示 5.二叉搜索树中第k小元素思路&#xff1a;代码展示 6.二叉树的所有路径思路分析代码展示 总结 了解DFS 所谓DFS就是就…

编译qt5.15.2(mac/windows)的mysql驱动(附带编译好的文件)

文章目录 0 背景1 编译过程2 福利 0 背景 因为需要连接到mysql数据库&#xff0c;所以需要连mysql驱动。 1 编译过程 1&#xff0c;打开文件/Users/mac/Qt5.14.2/5.14.2/Src/qtbase/src/plugins/sqldrivers/sqldrivers.pro&#xff0c;注释掉QMAKE_USE mysql&#xff1b; 如…

宝藏网站推荐-封面图片生成器

封面图片生成器&#xff1a;封面图生成器 | 太空编程 (spacexcode.com)[https://spacexcode.com/coverview] 由来 最近爱上了写文案&#xff0c;在网上冲浪的时候发现一个宝藏网站。Spacecode&#xff0c;一个大神维护的个人网站&#xff0c;含有前端知识库、个人博客及他做…

【设计模式】JAVA Design Patterns——Commander(指挥官模式)

&#x1f50d;目的 用于处理执行分布式事务时可能遇到的所有问题。 &#x1f50d;解释 处理分布式事务很棘手&#xff0c;但如果我们不仔细处理&#xff0c;可能会带来不想要的后果。假设我们有一个电子商务网站&#xff0c;它有一个支付微服务和一个运输微服务。如果当前运输…