首页/新闻资讯/正文详情

priority_queue的适用和模拟实现

发布时间:2026/9/27 10:10:50 来源:云帆数科 栏目:资讯中心
priority_queue的适用和模拟实现
priority_queuq的介绍1.优先级队列:priority queue是一个容器适配器的类型他被特别设计乘第一个元素总是所有元素中最大的根据一些严格弱排序的标准(这个好像是调整顺序的时候会让数据相对性改变)这个容器非常类似于堆他的元素在任何的时间都能被插入并且只能检索最大堆元素优先级队列被实现成容器适配器容器适配器即将特定容器类封装为其底层容器类并且提供一些特殊的接口让访问他的元素。数据从尾部bakc删除其称为优先级队列的顶部底层的容器可以是任何标准的容器类模板或者一些其他被特定设计的容器类容器可以通过随机迭代器访问并且支持下面的操作下面还有一堆不想翻译了自己去看把反正意思就是跟堆一毛一样帅哥靓女们看这里这里很重要2.接口其实也没啥看的这玩意就跟用堆实现一些接口一样还是很简单的特别注意他的构造函数3.仿函数仿函数这里比较有意思仿函数是重载了()的一个类---这里听着名字以为是函数我去太坑了但其实他是类priority_queue这个构造用仿函数的目的啊是为了控制比较如果你想写一个建小堆的如果我们不知道仿函数的时候我们就得要搞两个类出来但是但是我们有仿函数就直接作为这个类的成员我去太方便了说实话直接控制比较的大小(我们比较的时候也用仿函数重载的()去比较)这样我们就能控制参数来控制大小堆了后面也有很多这东西的讲解----还是比较实用的4.else如果这里存储自定义类型的变量---就必须要确保自定义类型重载了比较相关的运算符#define _CRT_SECURE_NO_WARNINGS class Date { public: Date(int year 1900, int month 1, int day 1) : _year(year) , _month(month) , _day(day) { } bool operator(const Date d)const { return (_year d._year) || (_year d._year _month d._month) || (_year d._year _month d._month _day d._day); } bool operator(const Date d)const { return (_year d._year) || (_year d._year _month d._month) || (_year d._year _month d._month _day d._day); } friend ostream operator(ostream _cout, const Date d) { _cout d._year - d._month - d._day; return _cout; } private: int _year; int _month; int _day; }; void TestPriorityQueue() { // 大堆需要用户在自定义类型中提供的重载 priority_queueDate q1; q1.push(Date(2018, 10, 29)); q1.push(Date(2018, 10, 28)); q1.push(Date(2018, 10, 30)); cout q1.top() endl; // 如果要创建小堆需要用户提供的重载 priority_queueDate, vectorDate, greaterDate q2; q2.push(Date(2018, 10, 29)); q2.push(Date(2018, 10, 28)); q2.push(Date(2018, 10, 30)); cout q2.top() endl; }看到没我随便ctrlc ctrlv就从小白变成了编程高手啊啊啊学的太慢好难受有没有什么芯片直接插我脑门里直接学习大量编程让我直接精通c 啊哈哈哈priority_queue的模拟实现同志们加油我去ctrl c ctrl v了namespace w { templateclass T class greater { public: bool operator()(const T left, const T right) { return left right; } }; templateclass T class less { public: bool operator()(const T left, const T right) { return left right; } }; template class T, class Container vectorT, class Compare lessT class priority_queue { public: priority_queue() :c() {} template class InputIterator priority_queue(InputIterator first, InputIterator last) :c(first,last) { int count c.size(); int root (count - 2) / 2; for (; root 0; --root) { AdjustDown(root); } } bool empty() const { return c.empty(); } size_t size() const { return c.size(); } const T top() const { return c.front(); } void push(const T x) { c.push_back(x); AdjustUp(c.size() - 1); } void pop() { if (empty()) { return; } std::swap(c.front(), c.back()); c.pop_back(); AdjustDown(0); } private: void AdjustUp(int child) { while (child) { int parent ((child - 1) 1); if (comp(c[parent], c[child])) { std::swap(c[parent], c[child]); child parent; } else break; } } void AdjustDown(int parent) { int child parent * 2 1; while (child c.size()) { if (child 1 c.size() comp(c[child], c[child 1])) { child 1; } if (comp(c[parent], c[child])) { std::swap(c[parent], c[child]); parent child; child parent * 2 1; } else break; } } Container c; Compare comp; }; } int main() { vectorint v { 4,8,1,6,2,9,5 }; w::priority_queueint pq(v.begin(), v.end()); while (!pq.empty()) { cout pq.top() ; pq.pop(); }coutendl; return 0; }还是简单说一说吧这里我觉得有三个地方需要自己理解一下1.就是AdjustUp这个函数呢根堆的向上调整是一样的我们把数组当成一颗树我们需要传的是child结点的下标--我们看去跟他的parent(下标就是(child-1)/2),去比较一下。如果child比parent大的时候就往上调整。刚开始学堆的时候一位这逻辑很难现在看看也就那样2.AdjustDown这函数和向上调整唯一的区别是传的参数要是父亲向下调整的时候就需要判断两个孩子谁大谁小让两个孩子更大的(如果都大于parent)换上去要关注这个避免数组越界3.就是迭代器构造这里的逻辑呢就是要找到最后一个孩子的父亲结点让后向下调整调整完之后去找上一个父亲不断走向下调整最后走到头的时候这个数组也就符合堆的规则了。话说这个jojo飙马野郎根本不够看啊快点更新

相关推荐

Read the Docs 的 llms.txt 支持:为 AI 代理提供结构化文档入口的完整指南
Read the Docs 的 llms.txt 支持:为 AI 代理提供结构化文档入口的完整指南

后端文档 【免费下载链接】readthedocs.org The source code that powers readthedocs.org 项目地址: https://gitcode.com/gh_mirrors/re/readthedocs.org 点击查看 免费下载 Read the Docs 原生支持在项目域名的顶层路径(/llms.txt 与 /llms-full.txt… · 2026/9/27 10:10:32

TypeScript 对象类型(Object Types)完全指南:interface、type 别名与匿名类型的实战运用
TypeScript 对象类型(Object Types)完全指南:interface、type 别名与匿名类型的实战运用

文档教程 【免费下载链接】typescript-book The Concise TypeScript Book: A Concise Guide to Effective Development in TypeScript. Free and Open Source. 项目地址: https://gitcode.com/gh_mirrors/typ/typescript-book 点击查看 免费下载 本篇技术指南以《T… · 2026/9/27 10:10:32

Next.js 错误处理全指南:Error Boundaries、Server Actions 导航陷阱与优雅降级(preguntas-entrevista-react 项目实践)
Next.js 错误处理全指南:Error Boundaries、Server Actions 导航陷阱与优雅降级(preguntas-entrevista-react 项目实践)

前端教程 【免费下载链接】preguntas-entrevista-react Preguntas tpicas sobre React para entrevistas de trabajo ⚛️ 项目地址: https://gitcode.com/gh_mirrors/pr/preguntas-entrevista-react 点击查看 免费下载 导读 本文围绕 .agents/skills/next-best-p… · 2026/9/27 10:10:26

网站被黑挂马别慌,dreamviewer网页设计安全加固指南与多少钱避坑
网站被黑挂马别慌,dreamviewer网页设计安全加固指南与多少钱避坑

网站被黑挂马别慌,dreamviewer网页设计安全加固指南与多少钱避坑 昨晚三点被运维电话惊醒,说官网首页突然变了,跳出一堆博彩广告,浏览器直接提示“不安全”。这种网站被黑挂马不知道怎么办… · 2026/9/27 12:19:59

WordPress火车头规则速查手册:新手避坑指南
WordPress火车头规则速查手册:新手避坑指南

WordPress火车头规则速查手册:新手避坑指南 网站被黑挂马,后台莫名多出未知页面,首页代码被篡改植入博彩广告——这是很多 WordPress… · 2026/9/27 12:19:53

新手入门必看5款网站访问量查询工具实操指南
新手入门必看5款网站访问量查询工具实操指南

新手入门必看5款网站访问量查询工具实操指南 网站做好了没人访问,这大概是所有刚搞完建站项目的老板们最头疼的事。你花了大几万,甚至几十万,请团队开发了几个月,域名备案也过了,服务器也搭好了,结果一打开后台,日活只有个位数,除了自己和员工,连个… · 2026/9/27 12:19:47

新乡外贸网站建设完整流程拆解,3步搞定备案与部署
新乡外贸网站建设完整流程拆解,3步搞定备案与部署

新乡外贸网站建设完整流程拆解,3步搞定备案与部署 备案流程一头雾水,是不是让你对新乡外贸网站建设望而却步?很多老板以为建站就是买个模板、传个文件,结果卡在服务器选址和域名解析上,甚至因为不懂海外加速导致询盘流失。… · 2026/9/27 12:19:41

网站开发工作时间全解:3步避坑,告别拖稿最佳实践
网站开发工作时间全解:3步避坑,告别拖稿最佳实践

网站开发工作时间全解:3步避坑,告别拖稿最佳实践 改个需求建站公司拖一周,这种憋屈事谁没干过?明明只是换个Banner图、改两句文案,对方却以“排期紧”、“开发忙”为由,让你干等三天。这不仅是效率问题,更是信任危机。要想彻底解决这个痛点,必… · 2026/9/27 12:19:35

外贸先做网站再开公司速查手册:3步搞定低成本起步
外贸先做网站再开公司速查手册:3步搞定低成本起步

外贸先做网站再开公司速查手册:3步搞定低成本起步 别再把钱砸在那些丑得掉渣的模板网站上了。 看着满屏的默认字体和僵硬的布局,客户点进来三秒就关掉,你连展示产品的机会都没有。… · 2026/9/27 12:19:17

MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现
MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现

简介:这套Matlab仿真工具完整呈现雷达信号脉冲压缩过程,从线性调频(LFM)信号生成、目标回波仿真到匹配滤波压缩处理均有可运行代码支撑,面向电子信息工程、计算机、数学等专业学生,适用于课程设计、期末大作… · 2026/9/27 0:00:01

汕头网站建设制作厂家避坑指南:5大注意事项救急
汕头网站建设制作厂家避坑指南:5大注意事项救急

汕头网站建设制作厂家避坑指南:5大注意事项救急 改个需求建站公司拖一周,这种憋屈事我见得太多了。 很多汕头老板找本地建站团队,签合同前看着方案挺美,一上线就变脸。 今天不聊虚的,直接拆解找 汕头网站建设制作厂家 时的5个核心 注意事项… · 2026/9/27 0:00:01

多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习
多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习

简介:基于PyTorch的多模态虚假新闻检测项目完整代码包,面向自然语言处理与计算机视觉交叉方向的开发者、科研人员及毕业设计选题者,解决社交媒体中文本与图像联合识别虚假新闻的问题。系统以BERT预训练模型提取文本语义特征,以Res… · 2026/9/27 0:00:01

MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现
MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现

简介:这套Matlab仿真工具完整呈现雷达信号脉冲压缩过程,从线性调频(LFM)信号生成、目标回波仿真到匹配滤波压缩处理均有可运行代码支撑,面向电子信息工程、计算机、数学等专业学生,适用于课程设计、期末大作… · 2026/9/27 0:00:01

汕头网站建设制作厂家避坑指南:5大注意事项救急
汕头网站建设制作厂家避坑指南:5大注意事项救急

汕头网站建设制作厂家避坑指南:5大注意事项救急 改个需求建站公司拖一周,这种憋屈事我见得太多了。 很多汕头老板找本地建站团队,签合同前看着方案挺美,一上线就变脸。 今天不聊虚的,直接拆解找 汕头网站建设制作厂家 时的5个核心 注意事项… · 2026/9/27 0:00:01

多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习
多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习

简介:基于PyTorch的多模态虚假新闻检测项目完整代码包,面向自然语言处理与计算机视觉交叉方向的开发者、科研人员及毕业设计选题者,解决社交媒体中文本与图像联合识别虚假新闻的问题。系统以BERT预训练模型提取文本语义特征,以Res… · 2026/9/27 0:00:01

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码