【C++第十八章】Map和Set

Map和Set

map和set的介绍

  容器分为两种,序列式容器关联式容器,序列式容器因为底层是线性序列的数据结构,存储的是元素本身,而关联式容器中不单是为了存储数据,还要进行查找,所以存储的是键值对,能够更有效的对数据进行检索。而本篇所介绍的map和set就是关联式容器

键值对

  键值对用来表示具有一一对应的一种结构,该结构一般包含key和value,key表示键值,value表示key对应的数据,比如学生所对应的成绩,单词所对应的中文。

set

  1. set是key模型,它的value就是key,且value唯一,set中的元素不能在容器中修改,可以插入和删除。
  2. set底层是用的红黑树进行维护。
  3. set中的元素总是按照其内部比较对象所指示的特定严格弱排序准则进行排序。
  4. set容器通过key访问单个元素速度通常比unordered_set(哈希)慢,但是set允许根据顺序对子集进行直接迭代(有序)。

insert

  当一个值已经存在时,会返回false,成功插入则会返回true。
Pasted image 20240905171844

erase

  erase接收迭代器时,如果迭代器没有找到该数,就会报错,但是erase接收具体的值时,没有该数会正常运行,并且erase返回的是size_t告诉我们删除了几个数。

Pasted image 20240905173439

Pasted image 20240905173718

lower_bound和upper_bound

  用于寻找迭代器区间,可以配合erase使用。

Pasted image 20240905175052

equal_range

  equal_range会返回一个pair,first返回>=val的迭代器,second返回>val的迭代器

Pasted image 20240905175945

count

  count可以查看当前值存在的数量,在set中可用于看该值在不在容器中,而multiset可用于统计数量。

Pasted image 20240905180109

multiset

  允许有重复的值插入set中,在底层存储的是<value,value>,对于搜索树来说,重复数据插入左边或者右边都可以,红黑树会进行平衡,当有多个值时,find会返回中序的第一个val。

Pasted image 20240905181204

  equal_range也可以在这里使用,multiset可以存储重复数据,而equal_range可以指定删除一样的数据。

Pasted image 20240905195005

map

  1. map的用法与set基本一致,不过map是kv模型,其中map的key是键值对中key的类型,T是键值对中value的类型。
  2. 在map内部中,key与value通过成员类型value_type绑定在一起,取别名为pair,并且不想自己的key被修改。Pasted image 20240906143846
  3. map中的元素总是按照键值key进行比较排序的。
  4. map中通过键值访问单个元素的速度通常比unordered_map容器慢,但是map允许根据顺序对元素进行直接迭代。
  5. map支持下标访问,在方括号中放入key,能找到对应的value。map底层为红黑树

image-20241010142429660

  我们写的时候不需要加上const,因为在pair中有一个copy,它既是构造也是拷贝构造,能够自动推导类型,然后初始化成const版本。

Pasted image 20240906144231

  我们可以用多种方法进行插入,make_pair是一个函数模板,能自动推导类型,所以可以简化使用。

image-20241010143813958

Pasted image 20240906145436

  当我们使用范围for时,可以加上引用防止拷贝构造过大的消耗(比如string拷贝会进行深拷贝,消耗会更大),map的first不能修改,second可以修改

Pasted image 20240906150916

  在map中统计次数可以用下面两种方法,第一种用++的方式统计

Pasted image 20240906151634

  第二种则是用方括号直接++,在方括号中加上key即可。

Pasted image 20240907095710

  原理在于方括号是一个具有复合功能的函数

Pasted image 20240907092636

  我们根据官网map的operator[]返回值来讲解,可以发现,方括号是insert实现的,insert的first是一个迭代器,指向一个新插入的数据,如果该数据已经存在,那么会转而指向已经存在的数据,insert的second在插入成功时返回true,否则返回false。

Pasted image 20240907093444

Pasted image 20240907093640

  在方括号中,如果value是int类型,那么第一次插入时value就返回0,insert的返回值是一个pair,pair的first是一个迭代器,迭代器解引用出来就是k-value的pair,而k-value的first就是key,second就是value,所以得出,countMap[str]++第一次插入,value为0,它再返回迭代器,迭代器取到的second也就是value,当我们++时,value也会++。

Pasted image 20240907094853

  multimap不支持方括号,因为有多个相同数据时,它不知道该返回哪一个。

结尾👍

  以上便是map和set的全部内容,如果有疑问或者建议都可以私信笔者交流,大家互相学习,互相进步!🌹

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

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

相关文章

网络编程(17)——asio多线程模型IOThreadPool

十七、day17 之前我们介绍了IOServicePool的方式&#xff0c;一个IOServicePool开启n个线程和n个iocontext&#xff0c;每个线程内独立运行iocontext, 各个iocontext监听各自绑定的socket是否就绪&#xff0c;如果就绪就在各自线程里触发回调函数。为避免线程安全问题&#xf…

腾讯云SDK点播播放数据

点播播放质量监控提供点播播放全链路的数据统计、质量监控及可视化分析服务。支持实时数据上报、数据聚合、多维筛选和精细化定向分析&#xff0c;可帮助企业实时掌控大盘运营状况、了解用户习惯和行为特征&#xff0c;有效指导运营决策、驱动业务增长。 注意事项 点播播放质…

Python 工具库每日推荐 【Pandas】

文章目录 引言Python数据处理库的重要性今日推荐:Pandas工具库主要功能:使用场景:安装与配置快速上手示例代码代码解释实际应用案例案例:销售数据分析案例分析高级特性数据合并和连接时间序列处理数据透视表扩展阅读与资源优缺点分析优点:缺点:总结【 已更新完 TypeScrip…

基于 CSS Grid 的简易拖拉拽 Vue3 组件,从代码到NPM发布(1)- 拖拉拽交互

基于特定的应用场景&#xff0c;需要在页面中以网格的方式&#xff0c;实现目标组件在网格中可以进行拖拉拽、修改大小等交互。本章开始分享如何一步步从代码设计&#xff0c;最后到如何在 NPM 上发布。 请大家动动小手&#xff0c;给我一个免费的 Star 吧~ 大家如果发现了 Bug…

探索未来:mosquitto-python,AI领域的新宠

文章目录 探索未来&#xff1a;mosquitto-python&#xff0c;AI领域的新宠背景&#xff1a;为何选择mosquitto-python&#xff1f;库简介&#xff1a;mosquitto-python是什么&#xff1f;安装指南&#xff1a;如何安装mosquitto-python&#xff1f;函数用法&#xff1a;5个简单…

代码随想录算法训练营第四十六天 | 647. 回文子串,516.最长回文子序列

四十六天打卡&#xff0c;今天用动态规划解决回文问题&#xff0c;回文问题需要用二维dp解决 647.回文子串 题目链接 解题思路 没做出来&#xff0c;布尔类型的dp[i][j]&#xff1a;表示区间范围[i,j] &#xff08;注意是左闭右闭&#xff09;的子串是否是回文子串&#xff0…

深入理解Transformer的笔记记录(精简版本)---- Transformer

自注意力机制开启大规模预训练时代 1 从机器翻译模型举例 1.1把编码器和解码器联合起来看待的话,则整个流程就是(如下图从左至右所示): 1.首先,从编码器输入的句子会先经过一个自注意力层(即self-attention),它会帮助编码器在对每个单词编码时关注输入句子中的的其他单…

【JavaEE】——回显服务器的实现

阿华代码&#xff0c;不是逆风&#xff0c;就是我疯 你们的点赞收藏是我前进最大的动力&#xff01;&#xff01; 希望本文内容能够帮助到你&#xff01;&#xff01; 目录 一&#xff1a;引入 1&#xff1a;基本概念 二&#xff1a;UDP socket API使用 1&#xff1a;socke…

2-118 基于matlab的六面体建模和掉落仿真

基于matlab的六面体建模和掉落仿真&#xff0c;将对象建模为刚体来模拟将立方体扔到地面上。同时考虑地面摩擦力、刚度和阻尼所施加的力&#xff0c;在三个维度上跟踪平移运动和旋转运动。程序已调通&#xff0c;可直接运行。 下载源程序请点链接&#xff1a;2-118 基于matla…

基于SpringBoot“花开富贵”花园管理系统【附源码】

效果如下&#xff1a; 系统注册页面 系统首页界面 植物信息详细页面 后台登录界面 管理员主界面 植物分类管理界面 植物信息管理界面 园艺记录管理界面 研究背景 随着城市化进程的加快和人们生活质量的提升&#xff0c;越来越多的人开始追求与自然和谐共生的生活方式&#xf…

使用激光跟踪仪提升码垛机器人精度

标题1.背景 码垛机器人是一种用于工业自动化的机器人&#xff0c;专门设计用来将物品按照一定的顺序和结构堆叠起来&#xff0c;通常用于仓库、物流中心和生产线上&#xff0c;它们可以自动执行重复的、高强度的搬运和堆垛任务。 图1 码垛机器人 传统调整码垛机器人的方法&a…

通信工程学习:什么是DIP数据集成点

DIP&#xff1a;数据集成点 DIP数据集成点&#xff08;Data Integration Point&#xff09;&#xff0c;简称DIP&#xff0c;是物联网技术&#xff08;IoT&#xff09;和机器到机器&#xff08;M2M&#xff09;通信中的一个重要组成部分。DIP在数据集成和传输过程中扮演着关键角…

【笔记】6.2 玻璃的成型

玻璃熔体的成型方法,有压制法(例如,制作水杯、烟灰缸等)、压延法(例如,制作压花玻璃等)、浇铸法(例如,制作光学玻璃、熔铸耐火材料、铸石等) 、吹制法(例如,制作瓶罐等空心玻璃)、拉制法(例如,制作窗用玻璃、玻璃管、玻璃纤维等)、离心法(例如,制作玻璃棉等)、喷吹法(例如,制作…

Ansible 工具从入门到使用

1. Ansible概述 Ansible是一个基于Python开发的配置管理和应用部署工具&#xff0c;现在也在自动化管理领域大放异彩。它融合了众多老牌运维工具的优点&#xff0c;Pubbet和Saltstack能实现的功能&#xff0c;Ansible基本上都可以实现。 Ansible能批量配置、部署、管理上千台主…

各类排序详解

前言 本篇博客将为大家介绍各类排序算法&#xff0c;大家知道&#xff0c;在我们生活中&#xff0c;排序其实是一件很重要的事&#xff0c;我们在网上购物&#xff0c;需要根据不同的需求进行排序&#xff0c;异或是我们在高考完报志愿时&#xff0c;需要看看院校的排名&#…

qt QGraphicsItem详解

一、概述 QGraphicsItem是Qt框架中图形视图框架&#xff08;Graphics View Framework&#xff09;的一个核心组件&#xff0c;它是用于表示2D图形元素的基类。 它支持的功能包括&#xff1a; 设置和获取图形项的位置和尺寸。控制图形项的外观&#xff0c;如颜色、笔刷、边框…

京东web 京东e卡绑定 第二部分分析

声明 本文章中所有内容仅供学习交流使用&#xff0c;不用于其他任何目的&#xff0c;抓包内容、敏感网址、数据接口等均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff01; 有相关问题请第一时间头像私信联系我删…

请求参数中字符串的+变成了空格

前端请求 后端接收到的结果 在URL中&#xff0c;某些字符&#xff08;包括空格、、&、? 等&#xff09;需要被编码。具体而言&#xff0c;在URL中&#xff0c;空格通常被编码为 或 %20。因此&#xff0c;如果你在请求参数中使用 &#xff0c;它会被解释为一个空格。 如果…

2024重生之回溯数据结构与算法系列学习(12)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丟脸好嘛?】

欢迎各位彦祖与热巴畅游本人专栏与博客 你的三连是我最大的动力 以下图片仅代表专栏特色 [点击箭头指向的专栏名即可闪现] 专栏跑道一 ➡️ MYSQL REDIS Advance operation 专栏跑道二➡️ 24 Network Security -LJS ​ ​ ​ 专栏跑道三 ➡️HCIP&#xff1b;H3C-SE;CCIP——…

智能边缘计算 | 项目快速部署指南

在数字化浪潮的推动下&#xff0c;边缘计算与人工智能的深度融合正在成为推动智能社会发展的新动力。 边缘计算通过将数据处理和分析任务从中心服务器转移到更接近数据源的端侧&#xff0c;从而显著降低数据传输延迟&#xff0c;提高了响应速度和安全隐私性。在人工智能的加持…