STL-priority_queue

 文档

  

目录

 1.关于priority_queued1的定义

2.priority_queue的使用


1.关于priority_queued1的定义

1. 优先队列是一种容器适配器,根据严格的弱排序标准,它的第一个元素总是它所包含的元素中最大的。

2. 此上下文类似于堆,在堆中可以随时插入元素,并且只能检索最大堆元素(优先队列中位于顶部的元 素)。

3. 优先队列被实现为容器适配器,容器适配器即将特定容器类封装作为其底层容器类,queue提供一组特定的成员函数来访问其元素。元素从特定容器的“尾部”弹出,其称为优先队列的顶部。

4. 底层容器可以是任何标准容器类模板,也可以是其他特定设计的容器类。容器应该可以通过随机访问迭 代器访问,并支持以下操作:

  • empty():检测容器是否为空
  • size():返回容器中有效元素个数
  • front():返回容器中第一个元素的引用
  • push_back():在容器尾部插入元素
  • pop_back():在容器尾部删除元素

5. 标准容器类vector和deque满足这些需求。默认情况下,如果没有为特定的priority_queue类实例化指 定容器类,则使用vector。

6. 需要支持随机访问迭代器,以便始终在内部保持堆结构。容器适配器通过在需要时自动调用算法函数 make_heap、push_heap和pop_heap来自动完成此操作。

2.priority_queue的使用

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

 1. 默认情况下,priority_queue是大堆

模拟实现代码:

	//仿函数template<class T>class Less{public:bool operator()(const T& x, const T& y){return x < y;}};template<class T>class Greater{public:bool operator()(const T& x, const T& y){return x > y;}};	template <class T,class Cantainer ,class Compare=Less<T>>class  priority_queue{private:void AdjustDown(int parent){Compare com;//找右孩子大的那个size_t child = parent * 2 + 1;while (child < _con.size()){//找出大的孩子(大根堆)if (child + 1 < _con.size() && com(_con[child], _con[child + 1]) )child++;if (com(_con[parent], _con[child])){std::swap(_con[parent], _con[child]);parent = child;child = parent * 2 + 1;}else {break;}}}void AdjustUp(int child){Compare com;int parent = (child - 1) / 2;while (child > 0){if (com(_con[parent],_con[child])){std::swap(_con[child], _con[parent]);child = parent;parent = (child - 1) / 2;}else{break;}}}public:priority_queue(){}template<class Inputlterator>priority_queue(Inputlterator first, Inputlterator last){while (first != last){_con.push_back(*first);++first;}// 建堆:非叶子节点依次向下调整for (int i = (_con.size() - 1 - 1) / 2; i >= 0; i--){AdjustDown(i);}};void pop(){std::swap(_con[0], _con[_con.size() - 1]);_con.pop_back();AdjustDown(0);}void push(const T& val){_con.push_back(val);AdjustUp(_con.size() - 1);}const T& top(){return _con[0];}bool empty(){return _con.empty();}size_t size(){return _con.size();}private:Cantainer _con;Compare comp;};
};

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

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

相关文章

uniapp将方法挂载到全局

前言 首先需要有一个自己封装的方法,话不多说,直接上代码! 方法文件(common.js) const getnav (page, type, param token) > {// type 判断是否 需要验证登录if (!page) return uni.showModal({title: 提示,content: 功能暂未开通~,showCancel: false})let user uni.g…

什么是数据API接口,数据API有哪些应用?

​自2020年4月“数据”正式被纳入生产要素范围以来&#xff0c;已经和其它生产要素一起融入经济价值创造过程&#xff0c;近年来我国数据交易市场规模迅速增长&#xff0c;数据需求逐年扩增&#xff0c;“数据”日益成为推动数字中国建设和加快数字经济发展的重要战略资源。 作…

JAVA和C#怎么开发SECS/GEM:recipe配方处理 S7F1、S7F19

recipe是什么内容呢&#xff1f; recipe是机台加工不同产品时的对应程式&#xff0c;指的是由制造工程师提前在机台上设置&#xff0c;并且EAP控制生产时会自动根据货的类型选择并控制机台按照制造工程师提前设置的方式进行加工。 recipe也称为配方&#xff0c;配方是怎么来的…

自学C语言-7

第7章 循环控制 生活中总会有许多简单而重复的工作&#xff0c;为完成这些重复性工作&#xff0c;需要花费很多时间。使用循环语句来处理程序开发中简单、重复性的工作是最好不过的了。 本章致力于使读者了解while、do…while和for3种循环结构的特点&#xff0c;以及转移语句的…

python绘制螺旋线

看书看到的&#xff0c;好有意思 import turtle colors [red,purple,blue,green,yellow,orange] t turtle.Pen() turtle.bgcolor(black) for x in range(360):t.pencolor(colors[x % 6])t.width(x/1001)t.forward(x)t.left(59) 这是效果图&#xff0c;真好看 import turtle …

新建VM虚拟机-安装centOS7-连接finalshell调试

原文 这里有问题 首先进入/etc/sysconfig/network-scripts/目录 cd /etc/sysconfig/network-scripts/ 然后编辑文件 ifcfg-ens33 vi ifcfg-ens33

时间复杂度解释

时空复杂度概述 首先o(1), o(n), o(logn), o(nlogn)是用来表示对应算法的时间复杂度,这是算法的时间复杂度的表示。不仅仅用于表示时间复杂度&#xff0c;也用于表示空间复杂度。 算法复杂度分为时间复杂度和空间复杂度。其作用&#xff1a; 时间复杂度是指执行这个算法所需要…

力扣712. 两个字符串的最小ASCII删除和

动态规划 思路&#xff1a; 假设 dp[i][j] 是 s1 长度 i 和 s2 长度 j 两个字符串的最小 ASCII 删除和&#xff1b;dp[i][j] 可以由&#xff1a; 如果 s1 的第 i 个字符&#xff08;s1[i - 1]&#xff09;和 s2 的第 j 个字符&#xff08;s2[j - 1]&#xff09;不相等&#xf…

Python中的递归函数是什么

Python 递归函数 递归的特性&#xff1a; 1.调用自身函数 2.有一个结束条件 3.递归效率不高&#xff0c;可能会导致栈溢出(函数调用是通过栈这种数据结构实现的&#xff0c;每进入一个函数调用&#xff0c;栈就会增加一层栈帧&#xff0c;函数每返回&#xff0c;栈就会减少…

idea项目如何上传gitee

1.先创建仓库 2.从gitee上面clone下来 3.配置一下git 4.在idea里面安装Gitee插件&#xff08;安装完插件重启一下&#xff09; 5.将项目提交到远程仓库 git->add->✔ 完后点击↗ 在码云如何获取token&#xff1f; 注&#xff1a;没有解决&#xff0c;有时间在继续研究

响应式Web开发项目教程(HTML5+CSS3+Bootstrap)第2版 例5-4 Document

代码 <!doctype html> <html> <head> <meta charset"utf-8"> <title>Document</title> </head><body> <canvas id"cavsElem" width"400" height"600">您的浏览器不支持Canvas…

“农村新型便民商店”成为电商下沉市场的新业态、新模式、新场景

“农村新型便民商店”成为电商下沉市场的新业态、新模式、新场景 文丨微三云营销总监胡佳东&#xff0c;点击上方“关注”&#xff0c;为你分享市场商业模式电商干货。 - 引言&#xff1a;从商务部、中华全国供销合作总社等9部门印发的《县域商业三年行动计划&#xff08;202…

FDTD的边界条件设置

PML边界条件 完美匹配层&#xff08;Perfectly Matched Layers&#xff0c;简称PML&#xff09;是一种高级吸收边界条件&#xff0c;在有限差分时域法&#xff08;Finite-Difference Time-Domain&#xff0c;简称FDTD&#xff09;模拟中被广泛应用、。PML旨在通过在仿真区域边…

vit细粒度图像分类(三)TRS-DeiT 学习笔记

1.摘要 细粒度图像分类任务由于自身存在的细微的类间差别和巨大的类内差别使其极具挑战性&#xff0c; 为了更好地学习细粒度图像的潜在特征&#xff0c; 该算法将知识蒸馏引入到细粒度图像分类任务中&#xff0c; 提出基于知识蒸馏与目标区域选取的细粒度图像分类方法&#xf…

面试相关|常见试题 or 易错题集合

&#x1f4eb; 作者简介&#xff1a;「六月暴雪飞梨花」&#xff0c;专注于研究Java&#xff0c;就职于科技型公司后端工程师 &#x1f3c6; 近期荣誉&#xff1a;华为云云享专家、阿里云专家博主、腾讯云优秀创作者 &#x1f525; 三连支持&#xff1a;欢迎 ❤️关注、&#x…

机器学习模型预测贷款审批

机器学习模型预测贷款审批 作者&#xff1a;i阿极 作者简介&#xff1a;数据分析领域优质创作者、多项比赛获奖者&#xff1a;博主个人首页 &#x1f60a;&#x1f60a;&#x1f60a;如果觉得文章不错或能帮助到你学习&#xff0c;可以点赞&#x1f44d;收藏&#x1f4c1;评论&…

tritonserver学习之六:自定义c++、python custom backend实践

tritonserver学习之一&#xff1a;triton使用流程 tritonserver学习之二&#xff1a;tritonserver编译 tritonserver学习之三&#xff1a;tritonserver运行流程 tritonserver学习之四&#xff1a;命令行解析 tritonserver学习之五&#xff1a;backend实现机制 1、环境准备…

C/C++ (stdio.h)标准库详解

cstdio,在C语言中称为stdio.h。该库使用所谓的流与物理设备&#xff08;如键盘、打印机、终端&#xff09;或系统支持的任何其他类型的文件一起操作。 在本文将会通过介绍函数参数&#xff0c;举出实际的简单例子来帮助大家快速上手使用函数。 目录 一、流 二、库函数 1、F…

range函数用法完全解读

嗨喽~大家好呀&#xff0c;这里是魔王呐 ❤ ~! python更多源码/资料/解答/教程等 点击此处跳转文末名片免费获取 迭代器是 23 种设计模式中最常用的一种&#xff08;之一&#xff09;&#xff0c;在 Python 中随处可见它的身影&#xff0c;我们经常用到它&#xff0c;但是却不…

如何制作翻页效果的电子书

如何制作翻页效果的电子书&#xff1f;想必大家对这个问题也非常困扰吧&#xff01;不知道从何做起&#xff1f;不知道该怎么制作&#xff1f;那你看到这篇文章就对啦&#xff01;按照我说的去实践&#xff0c;你也能轻松制作 制作翻页效果的电子书并不复杂&#xff0c;只需要一…