STL:优先级队列的实现

STL中优先级队列本质上就是堆。在上一篇博客中讲到过:堆是一种完全二叉树,逻辑结构上看起来像树,但在物理结构中是存储在线性表中。与普通线性表不同的是,堆中数据大小是规律排列的:小堆中每个节点都大于它的父节点,大堆中每个节点都小于它的父节点。此时就造成小堆中的根节点一定是所有数据中最小的,而大堆中的根节点一定是所有数据中最大的。

#include<iostream>
using namespace std;
namespace yhy{#include<vector>#include<functional>template<class T>class less{bool operator()(const T& front, const T& back){return front < back;}};template<class T>class greater{bool operator()(const T& front, const T& back){return front > back;}};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 (size_t i = 1; i < c.size() - 1;i++){adjust_up(i);}}bool empty() const{return c.empty();}size_t size() const{return c.size();}T& top() const{return c[0];}void adjust_up(size_t i){while (i > 0){if (comp(c[(i-1)/2], c[i])){swap(c[i], c[(i - 1) / 2]);i = (i - 1) / 2;}elsebreak;}}void adjust_down(size_t i){size_t j = size();size_t child = i * 2 + 1;while (j > i){if (comp(c[child], c[child + 1]) && child < j){++child;}if (comp(c[i], c[child])){swap(c[i], c[(child]);i = i * 2 + 1;}elsebreak;}}void push(const T& x){c.push_back(x);adjust_up();}void pop(){swap(c[0], c[c.size() - 1]);adjust_down();}private:Container c;Compare comp;};};

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

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

相关文章

向量内外积计算器:数学与工程的巧妙结合

随着人工智能、大数据等技术的飞速发展&#xff0c;数学工具的重要性日益凸显。向量内外积作为线性代数中的基础概念&#xff0c;不仅在理论上有着深远的影响&#xff0c;在实际应用中也发挥着巨大作用。本文将从向量内外积的定义、起源、应用场景以及计算示例等方面&#xff0…

【Prometheus】组件介绍-工作流程-部署模式-数据类型-监控

基于Prometheus和K8S构建智能化告警系统 一、Prometheus简介二、Prometheus特点于样本2.1、特点2.2、样本 三、Prometheus组件介绍四、Prometheus工作流程五、Prometheus的几种部署模式5.1、基本高可用模式5.2、基本高可用远程存储5.3、基本高可用远程存储联邦集群 六、Prometh…

【复刻】互联网使用会增加农户子女教育投资吗?(附数据+代码)

数据来源&#xff1a;来自2019年中国家庭金融调查数据时间跨度&#xff1a;2019年数据范围&#xff1a;全国数据指标&#xff1a;指标体系&#xff1a; 类型 变量 符号 变量定义 被解释变量 子女教育投资 son_edu 农户在未成年子女教育培训上的平均支出 解释变量 互联…

Halcon 元组/数组基本操作

Halcon 元组/数组基本操作 ** 元组/数组 tuple *******数组创建与字典******* ** 创建一个数组 A : [1,3,45,6] A[0] : 1 A[1] : 2** 定义一个key value字典类型create_dict (DictHandle) set_dict_tuple (DictHandle, test_tuple, A) set_dict_tuple (DictHandle, test_obj, …

ipad上能免费下载Python并运行吗?

前言 一般也是可以&#xff0c;直接 在 Ipad App store 里搜索 python 即可&#xff0c;如下: 不过小编并不觉得 ipad 适合 写 python&#xff0c;建议最好还是在电脑上如 mac 进行编程。 如果你对Python感兴趣&#xff0c;想要学习python&#xff0c;这里给大家分享一份Pyth…

物联网时代的嵌入式系统:从自动化到自适应的演变

&#xff08;本文为简单介绍&#xff0c;观点来源于网络&#xff09; 随着科技的飞速发展&#xff0c;物联网&#xff08;IoT&#xff09;已经成为当今时代的一个标志性技术。物联网通过将传感器、软件和其他技术嵌入到物理对象中&#xff0c;实现了物品之间的智能互联。嵌入式…

没有PFMEA分析的检测过程会有什么风险?

随着科技的快速发展&#xff0c;产品复杂度不断提升&#xff0c;检测过程的重要性日益凸显。然而&#xff0c;在这个过程中&#xff0c;如果没有进行PFMEA分析&#xff0c;将会带来怎样的风险呢&#xff1f;本文将对此进行深入探讨。 众所周知&#xff0c;检测是确保产品质量的…

数据模型概念

一、概念 (1) 定义 在数据库系统中针对不同的使用对象和应用目的&#xff0c;采用不同的数据模型。根据模型的应用的不同目的&#xff0c;可以将这些模型划分为两类&#xff1a; (2) 分类 A&#xff1a;概念数据模型 它也称信息模型它是按用户的观点&#xff08;观念世界&…

解释器设计模式

解释器设计模式&#xff08;Interpreter Pattern&#xff09;是一种行为型设计模式&#xff0c;它定义了一种语言的文法&#xff0c;并建立一个解释器来解释该语言中的句子。这种模式通常用于需要解释或执行一种特定类型的语言的场景&#xff0c;例如编程语言的编译器或解释器、…

【算法分析与设计】最大层内元素和

&#x1f4dd;个人主页&#xff1a;五敷有你 &#x1f525;系列专栏&#xff1a;算法分析与设计 ⛺️稳中求进&#xff0c;晒太阳 题目 给你一个二叉树的根节点 root。设根节点位于二叉树的第 1 层&#xff0c;而根节点的子节点位于第 2 层&#xff0c;依此类推。 请返…

政安晨:【完全零基础】认知人工智能(一)【超级简单】的【机器学习神经网络】 —— 预测机

开个头 很多小伙伴们很想亲近人工智能与机器学习领域&#xff0c;然而这个领域里的核心理论、算法、工具给人感觉都太过“高冷”&#xff0c;让很多小伙伴们望而却步&#xff0c;导致一直无法入门。 如何捅破这层窗户纸&#xff1f; 让高冷的不再高冷&#xff0c;让神秘的不…

防御保护第五次作业

此处实验共有七个需求 一、 需要新建两个nat转换策略来实现电信和移动的的分开处理&#xff0c;如下&#xff1a; 上面要求的保留地址在设置地址池的时候进行预留&#xff0c;转换的地址池也看个人设置的范围&#xff0c;别忘了这两个的安全策略也要放通&#xff0c;结果如下…