STL(五)(queue篇)

  • 我发现之前一版在电脑上看 常用函数部分 没有问题,由于是手打上去的,在手机上看会发生错位问题,现已将电脑原版 常用函数部分 截图改为图片形式,不会再发生错位问题,非常感谢大家的支持

  • ### priority_queue优先队列出现频率非常高,尤为重要(是一定要掌握的数据结构)

1.queue队列

  • queue是一种先进先出(FIFO)的数据结构
  • queue提供了一组函数来操作和访问元素,但它的功能相对较简单

queue的定义和结构如下: 

template <class T, class Container = deque<T>>
class queue;
  • T:表示存储在queue中的元素的类型。
  • Container:表示底层容器的类型,默认为deque,也可以使用其他容器类型,如list
  • queue的内部实现使用了底层容器来存储元素,并且只能通过特定的函数来访问和操作元素

以下是一些queue的常用函数:

### 这就像一个队伍———————————————————————
pop出去 < ——  1  2  3  4  5  6  < —— push进来———————————————————————

2.priority_queue优先序列

  • priority_queue与普通的队列不同,priority_queue中的元素是按照一定的优先级进行排序的
  • 默认情况下,priority_queue按照元素的值的从大到小进行排序,即最大元素位于队列的前面

priority_queue的定义和结构如下:

template <class T,Container=vector<T>,class Compare=less<typename Container::value_type>>
class priority_queue;
  • T:表示存储在priority queue中的元素的类型
  • Container:表示底层容器的类型,默认为vector,也可以使用其他容器类型,如deque
  • Compare:表示元素之间的比较函数对象的类型,默认为less即按照元素的值进行比较
  • priority_queue的内部实现使用了底层容器来存储元素,并且只能通过特定的函数来访问和操作元素

以下是一些priority_queue的常用函数:


### 介绍几种优先队列修改比较函数的方法

1.第一种

#include<bits/stdc++.h>
struct Compare{ //仿函数bool operator()(int a,int b){ //()重载 //自定义比较函数return a>b; //小根堆 }
};
int main(){std::priority_queue<int,std::vector<int>,Compare> pq;return 0;
}
  • 默认的是大根堆

2. 第二种

#include<bits/stdc++.h>
auto compare=[](int a,int b){//自定义比较函数,按照逆序排列return a>b; 
};
int main(){std::priority_queue<int,std::vector<int>,decltype(compare)>pq(compare);return 0;
}
  •  ### 如果优先队列中的元素类型比较简单,可以直接使用greater<T>来修改比较方法
  • priority_queue<int,vector<int>,greaterr<int>> pq;
    //std::greater函数对象定义在<functional>头文件中

    3.deque双端队列

  •  deque(双端队列)是一种容器,它允许在两端进行高效的插入和删除操作
  • deque是由一系列连续的存储块(缓冲区)组成的,每个存储块都存储了多个元素
  • 这使得deque能够在两端进行快速的插入和删除操作,而不需要移动其他元素

deque的定义和结构如下:

template <class T,class Allocator=allocator<T>>
class deque;
  • T:表示存储在deaue中的元素的类型
  • Allocator:表示用于分配内存的分配器类型,默认为allocator,deque的内部实现使用了一系列的存储块(缓冲区),每个存储块存储了多个元素,并且通过指针进行连接
  • 这种设计使得在两端进行插入和删除操作的时间复杂度为常数时间,即0(1)

###        “单调队列”将使用双端队列来实现(单纯考察双端队列的并不常见)

以下是一些deque的函数:

  • ### 10~12个并不常见 

4.例题讲解:

题号:lanqiao OJ 1113 

1.CLZ银行问题

#include<bits/stdc++.h>
using namespace std;
int main(){ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);int m;cin>>m;queue<string> V,N;while(m--){string op;cin>>op;//判断是否为来到窗口//IN情况,推入nameif(op=="IN") {string name,q;cin>>name>>q;if(q=="V"){V.push(name);}else{N.push(name);} }//out情况,弹出nameelse{string q;cin>>q;if(q=="V"){V.pop();}else{N.pop();}} }//输出VIP窗口namewhile(V.size()){cout<<V.front()<<"\n"; V.pop();} //输出普通窗口namewhile(N.size()){cout<<N.front()<<"\n"; N.pop();} return 0;
}
  •  每次都会弹出,队列虽然是一种线性结构但它是不能遍历的

题号:lanqiao OJ 741

2.合并果子

  • ### 这里用到一点点贪心
  • 1.先将1和2合并就消耗了3点体力,再将3和9合并就消耗了12点体力,共消耗15点体力
  • 2.先将2和9合并就消耗了11点体力,再将1和11合并就消耗了12点体力,共消耗23点体力
  • 方案1更省体力
  • 那么思路就是每次找到一大堆数字中拿出来最小的两个求和,再放回去(使用优先队列)
  • ### 这道题注意要开long long(int大概是2e9可能会超范围)
#include<bits/stdc++.h>
using namespace std;
using ll=long long;
int main(){ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);int n;cin>>n; //这里直接用队列就好了,没必要再存数组里 priority_queue<ll,vector<ll>,greater<ll>> pq; //类型比较简单,默认是大根堆,要的是小根堆把less直接改成greaterfor(int i=1;i<=n;++i){ll x;cin>>x;pq.push(x);} ll ans=0;while(pq.size()>=2){//这里pop出来两个最小的数,也就是小根堆顶部的两个数 ll x=pq.top();pq.pop();ll y=pq.top();pq.pop();ans+=x+y; //求和pq.push(x+y); //把最小数的和push回去 } cout<<ans<<"\n"; return 0;
}

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

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

相关文章

docker全解

docker全解 一、docker的基本概念 什么是docker? docker是一个开源的应用容器引擎&#xff0c;让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中&#xff0c;然后发布到任何流行的Linux或Windows机器上&#xff0c;也可以实现虚拟化。容器是完全使用沙箱机制&#…

MIT线性代数笔记-第26讲-对称矩阵及正定性

目录 26.对称矩阵及正定性打赏 26.对称矩阵及正定性 实对称矩阵的特征值均为实数&#xff0c;并且一定存在一组两两正交的特征向量 这对于单位矩阵显然成立 证明特征值均为实数&#xff1a; ​    设一个对称矩阵 A A A&#xff0c;对于 A x ⃗ λ x ⃗ A \vec{x} \lambda…

作业12.8

1. 使用手动连接&#xff0c;将登录框中的取消按钮使用qt4版本的连接到自定义的槽函数中&#xff0c;在自定义的槽函数中调用关闭函数。将登录按钮使用qt5版本的连接到自定义的槽函数中&#xff0c;在槽函数中判断ui界面上输入的账号是否为"admin"&#xff0c;密码是…

Matlab simulink PLL学习笔记

本文学习内容&#xff1a;【官方】2022小迈步之 MATLAB助力芯片设计系列&#xff08;一&#xff09;&#xff1a;电路仿真与模数混合设计基础_哔哩哔哩_bilibili 时域模型 testbench搭建 菜单栏点击simulink 创建空白模型 点击库浏览器 在PLL里面选择一种架构拖拽到画布。 如…

一文理解什么是交叉熵损失函数以及它的作用

今天看一个在深度学习中很枯燥但很重要的概念——交叉熵损失函数。 作为一种损失函数&#xff0c;它的重要作用便是可以将“预测值”和“真实值(标签)”进行对比&#xff0c;从而输出 loss 值&#xff0c;直到 loss 值收敛&#xff0c;可以认为神经网络模型训练完成。 那么这…

【Java用法】Hutool树结构工具-TreeUtil快速构建树形结构的两种方式 + 数据排序

Hutool树结构工具-TreeUtil快速构建树形结构的两种方式 数据排序 一、业务场景二、Hutool官网树结构工具2.1 介绍2.2 使用2.2.1 定义结构2.2.2 构建Tree2.2.3 自定义字段名 2.3 说明 三、具体的使用场景3.1 实现的效果3.2 业务代码3.3 实现自定义字段的排序 四、踩过的坑4.1 坑…

ambari hive on Tez引擎一直卡住

hive on tez使用./bin/hive启动后一直卡住&#xff0c;无法进入命令行 使用TEZ作为Hive默认执行引擎时&#xff0c;需要在调用Hive CLI的时候启动YARN应用&#xff0c;预分配资源&#xff0c;这需要花一些时间&#xff0c;而使用MapReduce作为执行引擎时是在执行语句的时候才会…

iPaaS架构深入探讨

在数字化时代全面来临之际&#xff0c;企业正面临着前所未有的挑战与机遇。技术的迅猛发展与数字化转型正在彻底颠覆各行各业的格局&#xff0c;不断推动着企业迈向新的前程。然而&#xff0c;这一数字化时代亦衍生出一系列复杂而深奥的难题&#xff1a;各异系统之间数据孤岛、…

基于SuperMap iObjects Java生成地图瓦片

作者&#xff1a;dongyx 前言 在GIS领域&#xff0c;地图瓦片技术作为GIS领域的关键技术&#xff0c;是提高地图服务性能的关键手段之一。通过预先生成地图的瓦片数据&#xff0c;可以显著提升用户访问地图时的响应速度和体验。SuperMap iObjects for Java作为一款强大的GIS开…

Docker, Docker-compose部署Sonarqube

参考文档 镜像地址: https://hub.docker.com/_/sonarqube/tags Docker部署文档地址 Installing from Docker | SonarQube Docs Docker-compose文档部署地址&#xff1a; Installing from Docker | SonarQube Docs 部署镜像 2.1 docker部署 # 宿主机执行 $. vi /etc/sysctl.conf…

Unity中Batching优化的GPU实例化(4)

文章目录 前言一、构建需要实例化的额外数据二、在顶点着色器&#xff0c;将实例化 ID 从 appdata 存入 v2f 传给片元着色器三、在片断着色器中访问具体的实例化变量三、使用代码修改Shader材质属性&#xff0c;实现GPU实例化后不同对象颜色不同的效果1、在C#测试脚本生成小板凳…

微前端介绍

目录 微前端概念 微前端特性 场景演示 微前端方案 iframe 方案 qiankun 方案 micro-app 方案 EMP 方案 无界微前端 方案 无界方案 成本低 速度快 原生隔离 功能强大 总结 前言&#xff1a;微前端已经是一个非常成熟的领域了&#xff0c;但开发者不管采用哪个现…

Leetcode—290.单词规律【简单】

2023每日刷题&#xff08;五十一&#xff09; Leetcode—290.单词规律 实现代码 class Solution { public:bool wordPattern(string pattern, string s) {unordered_map<char, string> m1;unordered_map<string, char> m2;stringstream stro(s);string tmp;for(a…

(env: Windows,mp,1.06.2308310; lib: 3.2.4) uniapp微信小程序

应公司需求&#xff0c;在特定情况下需要修改ip 在开发过程中出现的小插曲 1、第一种情况&#xff1a;重复声明 2、第二种情况&#xff1a; 应官方要求&#xff0c;需要跳转的 tabBar 页面的路径&#xff08;需在 pages.json 的 tabBar 字段定义的页面&#xff09;&#xff0…

ArkTS快速入门

一、概述 ArkTS是鸿蒙生态的应用开发语言。它在保持TypeScript&#xff08;简称TS&#xff09;基本语法风格的基础上&#xff0c;对TS的动态类型特性施加更严格的约束&#xff0c;引入静态类型。同时&#xff0c;提供了声明式UI、状态管理等相应的能力&#xff0c;让开发者可以…

硬件开发笔记(十五):RK3568底板电路VGA显示接口原理图分析

若该文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/134849296 红胖子网络科技博文大全&#xff1a;开发技术集合&#xff08;包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬…

C语言搭建项目-学生管理系统(非链表)

、 目录 搭建offer.h文件 搭建offer.c中的main函数 密码登入系统 搭建my_oferr.c中的接口函数 使用帮助菜单接口函数 增加学生信息接口函数 查询学生信息接口函数 删除学生信息接口函数 保存学生信息接口 打开文件fopen 关闭文件fclose 判断是否保存文件fwrite 退出执行文件…

年度工作总结怎么写?掌握这些年终总结万能公式,让你的报告出彩无比!

光阴似箭&#xff0c;日月如梭&#xff0c;时间总是不疾不徐地向前奔去&#xff0c;转眼就来到了2023年的最后一个月&#xff0c;12月一到&#xff0c;上班族和打工人又要开始忙活工作总结的事情~ 工作总结&#xff0c;不仅是一年工作的回顾&#xff0c;更是未来规划的起点。你…

cuda lib 线程安全的要义

1, 概述 cuda lib 线程安全的几个多线程的情景&#xff1a; 单卡多线程&#xff1b; 多卡多线程-每卡单线程&#xff1b; 多卡多线程-每卡多线程&#xff1b; 需要考虑的问题&#xff1a; 每个 cublasHandle_t 只能有一个stream么&#xff1f; 每个cusolverHandle_t 只能有一…

python3.5安装教程及环境配置,python3.7.2安装与配置

大家好&#xff0c;小编来为大家解答以下问题&#xff0c;python3.5安装教程及环境配置&#xff0c;python3.7.2安装与配置&#xff0c;现在让我们一起来看看吧&#xff01; python 从爬虫开始&#xff08;一&#xff09; Python 简介 首先简介一下Python和爬虫的关系与概念&am…