C++ 优先级队列priority_queue

1、常用接口

底层使用的是堆实现,默认为大堆

2、理解:

优先级队列就是即使插入的是一个乱序的,但是依旧会按照有序的顺序出队列

优先级队列就是会根据大小来出队列,而不是谁在队头就出谁。
优先级队列底层是使用堆实现,,说白了就是堆
所以首先要建堆
向上调整法

关于什么是堆:堆详解以及简单的堆排序(源代码)-CSDN博客

3、模拟实现

实现文件

#include<iostream>
#include<algorithm>
#include<vector>
#include<queue>
using namespace std;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;}};namespace myspace
{template< class T, class Container = vector<T>, class compare = Greater<T> >class priority_queue{public:size_t size(){return _con.size();}bool empty(){return _con.empty();}//大堆->升序void adjust_up(size_t child){compare com;//从最后一个开始,往前调整int parent = (child - 1) / 2;while (child > 0){//if (_con[parent] < _con[child]  )if(com( _con[parent],_con[child]) ){swap(_con[parent],_con[child]);child = parent;parent = (child - 1) / 2;}else{break;}}}void adjust_down(size_t parent){compare com;//从顶部位置开始向下int child = parent * 2 + 1;//左孩子while (child < size()){//if (child + 1 < size()&& _con[child + 1] > _con[child])//如果右孩子存在并且更大if (child + 1 < size() && com(_con[child], _con[child + 1])){++child;}// 交换if (com(_con[parent],_con[child] )){swap(_con[parent], _con[child]);parent = child;child = parent * 2 + 1;}else{break;}}}void push(const T& val){_con.push_back(val);//从最后位置开始向上调整adjust_up(size() - 1);}void pop(){//首尾交换swap(_con[0],_con[size() - 1]);_con.pop_back();//向下调整adjust_down(0);}T& top(){return _con[0];}private:Container _con;};}

测试文件

#include<queue>
#include"priority_queue.h"void test_peiority_queue()
{std::priority_queue<int,vector<int>,greater<int>> pq;//第三个参数是一个访函数,传递的是一个类型pq.push(1);pq.push(2);pq.push(3);pq.push(4);int n = pq.size();while (n--){cout << pq.top() << " ";pq.pop();}cout << endl;vector<int> v{9,4,2,4,6,2,4,8,1};sort(v.begin(),v.end(),greater<int>());//第三个参数是传的对象,因为是函数模板for (auto e : v){cout << e << " ";}cout << endl;
}void test_priority_queue2()
{myspace::priority_queue<int,vector<int> > pq;pq.push(1);pq.push(2);pq.push(3);pq.push(4);int  n = pq.size();while (n--){cout << pq.top() << " ";pq.pop();}cout << endl;}int main()
{//test_peiority_queue();test_priority_queue2();return 0;
}



 

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

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

相关文章

Java项目:基于SSM框架实现的实践项目管理系统(ssm+B/S架构+源码+数据库+毕业论文+开题报告)

一、项目简介 本项目是一套基于SSM框架实现的实践项目管理系统&#xff0c;主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的Java学习者。 包含&#xff1a;项目源码、数据库脚本等&#xff0c;该项目附带全部源码可作为毕设使用。 项目都经过严格调试&#xff…

SpringBoot @MockBean 导致ApplicationContext Reload带来的问题的解决方法

在基于SpringBoot的项目中&#xff0c;编写单元测试时&#xff0c;会遇到需要对一些被Spring容器管理的对象进行Mock的处理&#xff0c;但是这些对象可能被引用的比较多。这个时候可以使用 MockBean 来注释相关对象。 如下面的代码片段&#xff1a; package com.example.spri…

【前端】-【防止接口重复请求】

文章目录 需求实现方案方案一方案二方案三 需求 对整个的项目都做一下接口防止重复请求的处理 实现方案 方案一 思路&#xff1a;通过使用axios拦截器&#xff0c;在请求拦截器中开启全屏Loading&#xff0c;然后在响应拦截器中将Loading关闭。 代码&#xff1a; 问题&…

CentOS-Stream-9配置vsftpd

步骤一 vim /etc/vsftpd/vsftpd.conf&#xff0c;anonymous_enableYES&#xff0c;允许匿名。 systemctl enable vsftpd 设置vsftpd开机自动启动 systemctl restart vsftpd 重启vsftpd systemctl stop firewalld 关闭防火墙&#xff0c;匿名访问ftp成功&#xff0c;普通用户…

【MySQL】驱动表、被驱动表详解。—— 性能优化。

文章目录 什么是 驱动表 和 被驱动表&#xff1f;哪个表是驱动表&#xff1f;性能优化建议&#xff1a; 我是一名立志把细节都说清楚的博主&#xff0c;欢迎【关注】&#x1f389; ~ 原创不易&#xff0c; 如果有帮助 &#xff0c;记得【点赞】【收藏】 哦~ ❥(^_-)~ 如有错误…

Coursera: An Introduction to American Law 学习笔记 Week 04: Constitutional Law

An Introduction to American Law 本文是 https://www.coursera.org/programs/career-training-for-nevadans-k7yhc/learn/american-law 这门课的学习笔记。 文章目录 An Introduction to American LawInstructors Week 04: Constitutional LawKey Constitutional Law TermsSup…

nginx connect 异常

1.nginx反向代理 # 测试server {listen 80;server_name local.dongpeng.com;location / {# proxy_pass http://192.168.10.131:9394;proxy_pass http://127.0.0.1:9394;}} 2.出现异常 2024/05/01 17:53:41 [error] 6#6: *1 connect() failed (111: Connection refused…

pytorch多卡分布式训练卡住的问题

最近需要模型进行多任务学习&#xff0c;完成代码后单卡跑是没有问题的。但是多卡跑基本上会出现卡在第一个迭代的情况。忙了一天总算是解决了。总结一下我这里的原因&#xff1a; 我的代码里执行了torch.distributed.all_reduce() 的操作&#xff0c;但这个操作只服务于一个ta…

华纳云:ubuntu中fdisk找不到硬盘怎么解决?

如果在 Ubuntu 中使用 fdisk 命令找不到硬盘&#xff0c;可能是由于以下几个原因导致的&#xff1a; 1.未正确识别硬盘&#xff1a;可能是因为硬盘未被正确识别或未被操作系统识别。这可能是由于硬件连接问题、硬盘故障、驱动问题等引起的。 2.需要管理员权限&#xff1a;在 Ub…

黑马 - websocket搭建在线聊天室

这里写自定义目录标题 一、消息推送常见方式二、websocket 是什么&#xff1f;三、websocket api的介绍1、客户端 &#xff08;浏览器&#xff09; 四、实现在线聊天室1、需求2、聊天室流程分析3、消息格式4、代码实现 一、消息推送常见方式 1、轮训方式 2、SSE&#xff08;…

EasyDarwin录像存储

目录 1、安装ffmpeg 2、建立录像存储路径 3、修改EasyDarwin配置文件 4、测试 (1)推流&#x

2024年第二十一届 五一杯 (A题)大学生数学建模挑战赛 | 多目标优化问题,深度学习分析 | 数学建模完整代码解析

DeepVisionary 每日深度学习前沿科技推送&顶会论文&数学建模与科技信息前沿资讯分享&#xff0c;与你一起了解前沿科技知识&#xff01; 本次DeepVisionary带来的是五一杯的详细解读&#xff1a; 完整内容可以在文章末尾全文免费领取&阅读&#xff01; 第一个问题…

【Linux】进程终止

思维导图 学习内容 进程终止是进程控制里面的一个重要的知识&#xff0c;通过这一篇博客&#xff0c;我们可以学习到进程终止的概念&#xff0c;进程终止的三种情况&#xff0c;进程终止的退出码和退出信号&#xff0c;最后在来学习进程是如何进行终止的。 学习目标 进程终止…

诺基亚贝尔探访上海斯歌,共探创新合作新机遇

近日&#xff0c;上海斯歌K2 BPM迎来重要客户考察交流活动。来自诺基亚贝尔的首席数字官刘少勇一行莅临了上海斯歌K2 BPM 的武汉研发中心&#xff0c;并对上海斯歌在BPM业务流程管理领域的研发成果及交付能力给予了高度肯定。 此次活动不仅加深了双方的战略合作&#xff0c;也为…

维修家政按摩到家上门小程序开源版开发

维修家政按摩到家上门小程序开源版开发 智能定位&#xff0c;精准计费——全新上门服务平台功能解析。 全新上门服务平台已经上线&#xff0c;它拥有一系列强大的功能&#xff0c;旨在为用户提供最便捷、最个性化的服务体验。 !](https://img-blog.csdnimg.cn/direct/86195e…

Linux 查看主机内存,CPU使用率的两种推荐指令top ,free 指令解读

top 指令 top 指令是 Linux 系统中一个实时显示系统状态的动态视图工具&#xff0c;主要用于监控系统的整体运行状态&#xff0c;包括CPU使用率、内存使用情况、运行中的进程信息等。它是一个非常强大的命令行工具&#xff0c;常用于性能分析和故障排查。下面是一些基本的使用…

【QEMU系统分析之实例篇(八)】

系列文章目录 第八章 QEMU系统仿真的机器创建分析实例 文章目录 系列文章目录第八章 QEMU系统仿真的机器创建分析实例 前言一、QEMU是什么&#xff1f;二、QEMU系统仿真的机器创建分析实例1.系统仿真的命令行参数2.目标机器创建过程3.输出分析 总结 前言 本文以 QEMU 8.2.2 为…

WCH RISC CH32V303RCT6 单片机的SDI Printf 虚拟串口功能 类似SEGGER RTT打印功能 简单分析

参考&#xff1a; 有关于 SDI printf 更多的信息和资料吗&#xff1f; 关于 CH32 系列 MCU SDI 虚拟串口功能的使用 【CH32X035 评估板测评】 教你使用 SDI 接口重定向 printf SDI (Serial Data Interface) 是沁恒微电子 RISC-V 内核的私有外设接口,CH32 RISC-V 系列目前提供了…

掌握技巧:Linux下通过命令查看系统时间

在Linux系统中&#xff0c;系统时间是至关重要的。程序员经常需要查看系统时间来进行调试、日志记录以及任务调度等操作。 虽然大多数Linux发行版都提供了图形化界面来查看系统时间&#xff0c;但是使用命令行来获取系统时间更加高效和便捷。 本文将介绍几种在Linux下通过命令…

redis 高可用 Sentinel 详解

写在前面 redis 在我们日常的业务开发中是十分常见的&#xff0c;而redis的可用性就必须要有很高的要求&#xff0c;那么 redis集群的高可用由有一个或者多个 Sentinel(哨兵) 实例组成的 哨兵系统来保证的。 哨兵 由一个或者多个 Sentinel 实例组成的 Sentinel 系统可以监控任…