STL之queue

目录

queue队列

常用的deque函数

priority_queue队列(非常重要)

priority_queue常用函数

优先队列修改比较函数的方法

1.仿函数方法

2.自定义比较函数

deque双端队列

常用的函数

例题1

题目描述

输入描述

输出描述

示例输入输出

例题2

题目描述

输入描述

输出描述

输入输出示例

输入

输出


queue队列

queue是一种先进先出(FIFO)的数据结构。

queue提供了一组函数来操作和访问元素,但它的功能相对较简单。

queue的定义和结构如下:

template<class T,class Container = deque<T>>
class queue;

T:表示存储在queue中的元素类型。

Container:表示底层容器的类型,默认为queue。也可以使用其他容器类型,如list。

queue内部实现使用了底层容器来存储元素,并且只能通过特定的函数来访问和操作元素。

常用的deque函数

函数                        描述                        时间复杂度

push(x)            在队尾插入元素x                 O(1)

pop()                弹出队尾元素                      O(1)

front()              返回队首元素                       O(1)

back()              返回队尾元素                       O(1)

empty()            检查队列是否为空                O(1)

size()               返回队列中元素的个数         O(1)

priority_queue队列(非常重要)

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

priority_queue的定义和结构如下:

template<class T,class 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常用函数

函数                        描述                                时间复杂度

push(x)            在队尾插入到优先队列中          O(logn)

pop()                弹出优先队列中的顶部元素      O(logn)

top()                返回优先队列中的顶部元素       O(1)

empty()            检查优先队列是否为空             O(1)

size()               返回优先队列中元素的个数       O(1)

优先队列是个十分重要的数据结构

优先队列修改比较函数的方法

1.仿函数方法

struct Compare
{bool operator()(int a,int b){//自定义的比较函数,按照逆序排列return a>b;}
};
int main()
{std::priority_queue<int,std::vector<int>,Compare>pq;
}

2.自定义比较函数

auto compare = [](int a,int b)
{return a>b;
};
std::priority_queue<int,std::vector<int>,decltype(compare)>pq(compare);

deque双端队列

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

常用的函数

函数                                描述                                时间复杂度

push_back(x)            在尾部插入元素x                 平摊O(1)

push_front(x)             在头部插入元素x                 平摊O(1)

pop_front()                 弹出头部元素                       O(1)

pop_back()                 弹出尾部元素                       O(1)

front()                         返回头部元素                       O(1)

back()                         返回尾部元素                       O(1)

empty()            检查deque是否为空                        O(1)

size()               返回deque中元素的个数                 O(1)

clear()            清空deque中的所有元素                   O(1)

例题1

题目描述

ZZB银行有两个窗口,VIP窗口和普通窗口,VIP用户进入VIP窗口排队,剩下的进入普通窗口排队。现有M次操作,操作有四种类型如下:

IN name v:表示一名叫name的用户到VIP窗口排队

OUT v:表示VIP窗口队头的用户离开排队

IN name N:表明一名叫name的用户到普通窗口排队

OUT N:表明普通窗口队头的用户离开排队

求M次操作后VIP窗口队列和普通队列中的姓名

输入描述

第一行是一个整数M(1<=M<=1000),表示一共有M次操作,

第二行到第M+1行输入操作格式如下:

IN name v

OUT v

IN name N

OUT N

输出描述

输出M次操作后VIP窗口队列和普通队列中的姓名(从头到尾),先输出VIP窗口队列后输出普通窗口队列。

示例输入输出

输入:

5
IN xiaoming N
IN adel V
IN LAOZHAO N
OUT N
IN CLZ V

输出:

adel
CLZ
LAOZHAO

#include<iostream>
#include<string>
#include<queue>
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;if (op == "IN"){string name,q; cin >> name>>q;if (q == "V"){V.push(name);}else{N.push(name);}}else{string q; cin >> q;if (q == "V"){V.pop();}else{N.pop();}}}while (V.size()){cout << V.front() << endl;V.pop();}while (N.size()){cout << N.front() << endl;N.pop();}return 0;
}

例题2

题目描述

在一个果园里,多多已经将所有的果子打下来了,而且按果子的不同种类分成了不同的堆。多多决定把所有的果子合成一堆。

每一次合并,多多可以把两堆果子合到一起,消耗的体力等于两堆果子重量之和。可以看出,所有的果子经过n-1次合并之后,就剩下一堆了,多多在合并果子是总共消耗的体力等于每次合并消耗体力之和。

设计合并次序方案,获取体力消耗最小值。

输入描述

输入两行

第一行是一个整数n(1<=n<=10^4),表示果子的种类数。

第二行包含n个整数,表示每种果子的数量。

输出描述

输出一个整数,体力最小值,输入数据保证这个值小于2^33.

输入输出示例

输入

3

1 2 9

输出

15

#include<iostream>
#include<string>
#include<queue>
#include<vector>
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;for (int i = 1; i <= n; i++){LL x; cin >> x;pq.push(x);}LL ans = 0;while (pq.size() >= 2){LL x = pq.top(); pq.pop();LL y = pq.top(); pq.pop();ans += x + y;pq.push(x + y);}cout << ans << endl;return 0;
}

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

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

相关文章

【架构详细解读】

目录 架构基础 # 如何理解架构的演进&#xff1f; # 如何理解架构的服务化趋势&#xff1f; # 架构中有哪些技术点&#xff1f; 缓存 # 谈谈架构中的缓存应用&#xff1f; # 在开发中缓存具体如何实现&#xff1f; # 使用缓存的经验&#xff1f; 限流 # 什么是限流&#…

通过反射修改MultipartFile类文件名

1、背景 项目上有这样一个需求&#xff0c;前端传文件过来&#xff0c;后端接收后按照特定格式对文件进行重命名。(修改文件名需求其实也可以在前端处理的) //接口类似于下面这个样子 PosMapping("/uploadFile") public R uploadFile(List<MultipartFile> fil…

uniapp 字母索引列表插件(组件版) Ba-SortList

简介&#xff08;下载地址&#xff09; Ba-SortList 是一款字母索引列表组件版插件&#xff0c;可自定义样式&#xff0c;支持首字母字母检索、首字检索、搜索等等&#xff1b;支持点击事件。 支持首字母字母检索支持首字检索支持搜索支持点击事件支持长按事件支持在uniapp界…

Mac安装nvm以及使用nvm安装node

1. 安装nvm命令 git clone https://gitee.com/mirrors/nvm.git ~/.nvm && cd ~/.nvm && git checkout git describe --abbrev0 --tags2. 配置环境变量 vi ~/.bash_profileexport NVM_DIR"$HOME/.nvm" [ -s "$NVM_DIR/nvm.sh" ] &&…

【Vue2】一个数组按时间分割为【今年】和【往年】俩个数组

一. 需求 后端返回一个数组&#xff0c;前端按时间维度将该数组的分割为【今年】和【往年】俩个数组后端返回的数组格式如下 timeList:[{id:1,billTime:"2024-01-10",createTime:"2024-01-10 00:00:00",status:0},{id:2,billTime:"2022-05-25"…

【大数据】NiFi 中的处理器(二):PutDatabaseRecord

NiFi 中的处理器&#xff08;二&#xff09;&#xff1a;PutDatabaseRecord 1.基本介绍2.属性配置3.连接关系4.应用场景 1.基本介绍 PutDatabaseRecord 处理器使用指定的 RecordReader 从传入的流文件中读取&#xff08;可能是多个&#xff0c;说数组也成&#xff09;记录。这…

DHSP和DNS

一、服务程序 1.1DHCP定义 DHCP&#xff08;动态主机配置协议&#xff09;是一个局域网的网络协议。指的是由服务器控制一段IP地址范围&#xff0c;客户机登录服务器时就可以自动获得服务器分配的IP地址和子网掩码。默认情况下&#xff0c;DHCP作为Windows Server的一个服务组…

系列十六、抽象类 接口

一、抽象类 & 接口 1.1、抽象类 1.1.1、概述 被abstract修饰的类&#xff0c;称之为抽象类。抽象类中可以一个抽象方法也没有&#xff0c;但是如果一个类中有抽象方法&#xff0c;此类必须为抽象类。 1.1.2、特点 抽象类中可以有抽象方法也可以全部都是普通方法(包括实例…

【源码阅读】交易池txs_list

1、accountSet type accountSet struct {accounts map[types.Address]struct{}cache *[]types.Address }accountSet 只是一组用于检查是否存在的地址&#xff0c;以及一个能够从交易中派生地址的签名者。 as *accountSet 1.1newAccountSet func newAccountSet(addrs ...t…

20.Linux Shell自定义函数

文章目录 Linux Shell自定义函数1)函数的定义与使用2)函数的返回值默认情况使用return命令捕获函数输出 3)函数参数4)函数变量5)数组与函数数组作为函数参数数组作为函数的返回值 6)创建shell函数库 欢迎访问个人网络日志&#x1f339;&#x1f339;知行空间&#x1f339;&…

性格是如何形成的?能不能改变性格?

有一句话叫“性格决定命运”&#xff0c;广泛流传&#xff0c;也就是说 “命运”与“性格”是紧密相连的&#xff0c;可见“性格”对于一个人的重要性。 性格是怎么来的&#xff1f; 1、遗传基因 根据一些心理学家的最新研究&#xff0c;认为性格与人体内的基因有关系&#x…

不再恐惧指针,指针详解

什么是指针&#xff1f; 通俗来说指针就相当于地址&#xff0c;因为我们写入的代码每个变量的数据类型不同&#xff0c;字节大小不同&#xff0c;在计算机内存中所开辟存储的大小自然不同&#xff0c;且指针通常存储的是内存单元中最小单元的编号 比如&#xff1a;int*指针的…

【Scala】——面向对象

1 Scala 包 1.1 包风格 Scala 有两种包的管理风格。 第一种 Java 的包管理风格相同&#xff0c;每个源文件一个包&#xff08;包 名和源文件所在路径不要求必须一致&#xff09;&#xff0c;包名用“.”进行分隔以表示包的层级关系&#xff0c;如 com.atguigu.scala。另一种风…

遥感单通道图像保存为彩色图像

系列文章目录 第一章PIL单通道图像处理 文章目录 系列文章目录前言一、代码实现二、问题记录在这里插入图片描述 总结 前言 将单通道图像以彩色图像的形式进行保存主要使用了PIL库 一、代码实现 palette_data [***]&#xff1a;可以进行自定义设置 代码如下&#xff1a; fr…

UVa12304 2D Geometry 110 in 1!

题目链接 UVa12304 2D Geometry 110 in 1! 题意 这是一个拥有6&#xff08;二进制是110&#xff09;个子问题的2D几何问题集。 1 CircumscribedCircle x1 y1 x2 y2 x3 y3&#xff1a;求三角形(x1,y1)-(x2,y2)-(x3,y3)的外接圆。这3点保证不共线。答案应格式化成(x,y,r…

python实现对导入包中的全局变量进行修改

问题 在写程序中遇到这样一个问题&#xff0c;有一个base.py 文件&#xff0c;文件内容如下&#xff1a; #base.py文件 global x xbasedef print_x():print(x) 在另一个主程序test.py中&#xff0c;导入这个文件&#xff0c;并使用其中的print_x函数&#xff0c;但是我想修改…

服务器 配置git

参考了下面这篇文章&#xff0c;不对的地方做了改正 在服务器上git clone github项目的过程-CSDN博客 1. 下载解压 wget https://www.kernel.org/pub/software/scm/git/git-2.34.1.tar.gz tar -zxvf git-2.34.1.tar.gz 2. 安装 cd git-2.34.1/ ./configure make confi…

Geotools-PG空间库(Crud,属性查询,空间查询)

建立连接 经过测试&#xff0c;这套连接逻辑除了支持纯PG以外&#xff0c;也支持人大金仓&#xff0c;凡是套壳PG的都可以尝试一下。我这里的测试环境是Geosence创建的pg SDE&#xff0c;数据库选用的是人大金仓。 /*** 获取数据库连接资源** param connectConfig* return* {…

springboot私人健身与教练预约管理系统源码和论文

随着信息技术和网络技术的飞速发展&#xff0c;人类已进入全新信息化时代&#xff0c;传统管理技术已无法高效&#xff0c;便捷地管理信息。为了迎合时代需求&#xff0c;优化管理效率&#xff0c;各种各样的管理系统应运而生&#xff0c;各行各业相继进入信息管理时代&#xf…

【rk3568】01-环境搭建

文章目录 1.开发板介绍1.1相关资源&#xff1a;1.2接口布局1.3屏幕1.4核心板引脚可复用资源 2.环境搭建2.1安装依赖包2.2git配置2.3安装sdk2.4sdk介绍2.5sdk编译 3.镜像介绍 1.开发板介绍 开发板&#xff1a;atk-rk3568开发板 eMMC&#xff1a;64G LPDDR4&#xff1a;4G 显示屏…