met和set的特性及区别

1、关联式容器

在c++初阶阶段,我们已经接触了STL的部分容器,比如:vector,list,deque,forward_list等。

这些容器统称为序列式容器,因为其底层为线性序列的数据结构,里面存储的就是数据本身。

而关联式容器同样也是用来存储数据的容器,但与序列式容器不同的是,里面存储的<key,value>结构的键值对,在数据检索的时候比序列式容器的效率更高。

2、键值对

键值对用来表示具有一一对应关系的一种结构,该结构中一般包含两个成员变量key和value,key表示键值,value表示与key对应的信息,比如:现在需要建立一个英汉互译的字典,那该字典中必然有英文单词和其中文的含义,而且英文单词与其中文含义是一一对应的关系,通过英文单词就可以找到其中文含义。

3、树形结构的关联式容器

根据应用场景的不同,STL总共实现了两种不同结构的管理式容器:树形结构和哈希结构。树形结构的关联式容器主要有四种:map、set、multimap、multiset。这四种容器的共同点式:使用平衡二叉树(红黑树)作为其底层结果,容器中的元素是 一个有序的序列。

3.1set

3.1.1set的介绍

set是继承自collection的一个接口类,并且要求key一定唯一,set的底层是使用map来实现的,set的最大功能是对集合中的元素进行了去重,实现set接口类有树形Treeset和哈希性Hashset,set中的key不能修改,如果要修改,必须将原来的删掉,然后再重新插入修改后的值。

定义: 

  1. set是按照一定次序存储元素的容器
  2. set中,元素的value也标识它(value就是key,类型为T),并且每个value必须是唯一的。 set中的元素不能在容器中修改(元素总是const),但是可以从容器中插入或删除它们。
  3. 在内部,set中的元素总是按照其内部比较对象(类型比较)所指示的特定严格弱排序准则进行排序。
  4. set容器通过key访问单个元素的速度通常比unordered_set容器慢,但它们允许根据顺序对子集进行直接迭代。
  5. set在底层是用二叉搜索树(红黑树)实现的。

NOTICE !!!

1、与map/multimap不同,map/multimap中存储的是真正的键值对<key, value>set中只放 value,但在底层实际存放的是由<value, value>构成的键值对。

  1. set中插入元素时,只需要插入value即可,不需要构造键值对。
  2. set中的元素不可以重复(因此可以使用set进行去重)
  3. 使用set的迭代器遍历set中的元素,可以得到有序序列
  4. set中的元素默认按照小于来比较
  5. set中查找某个元素,时间复杂度为:$log_2 n$
  6. set中的元素不允许修改(为什么?)

set中的底层使用二叉搜索树(红黑树)来实现

3.1.2set的使用 

set的初始化

empty (1)
explicit set (const key_compare& comp = key_compare(),
              const allocator_type& alloc = allocator_type());
range (2)
template <class InputIterator>
  set (InputIterator first, InputIterator last,
       const key_compare& comp = key_compare(),
       const allocator_type& alloc = allocator_type());
copy (3)
set (const set& x)
1、set 的模板参数列表

T:set存放元素的类型,在底层中存储的实际上是<value,value>的键值对。

Compare:set中元素默认按照小于来比较。

Alloc:set中元素空间管理的方式,使用STL提供的空间配置器来管理

2、set的迭代器

 3.set的容量

1)、bool empty() const      检查set是否为空,空则返回true,否则返回true

2)、size_t size()  const    返回set中有效元素的个数

4、set的修改操作

 5、set使用案列

 3.2.map

3.2map
3.2.1map的介绍

map是一个接口类,该类没有继承自collection类,不能直接实例化对象,如果要实例化对象只能实例化 其实现类TreeMaphe或者HashMap,该类中存储的是<key,value>结构的键值对,并且k一定是唯一的,不能重复。且Map中键值对的key不能修改,value可以修改,如果要修改key,只能将key删除掉,然后再来进行重新插入。

 1、模板参数说明

key:键值中key的leixing

T:键值中value 的类型

compare:比较器的类型,在缺省的情况下,按照小于比较。

Alloc:空间配置器,用来配置空间,不需要用户传递吗,除非用户不想使用标准库提供的空间配置器。

2、迭代器的类型

参见cplusplus官网定义

1、map是关联式容器,他按照特定的次序存储由键值key和值value组合而成的元素。

2、在map中,键值key通常用于排序个唯一地标识元素,而值value中存储与此键值key关联的内容,键值key和value的类型可能不同。

3.2.2map的容器和元素访问

empty----------判断map是否为空

Test whether container is empty (public member function )

size--------------返回map元素的个数

Return container size (public member function )

max_size

Return maximum size (public member function )

map在元素访问的时候,有一个与operator[]类似的操作,都是通过key直接找到与key相对应的value然后将其引用返回,不同的是,当key不存在时,一般的operator[] 函数会抛出异常,而map中重载的operator[]函数会默认构造一个key和value键值对然后返回这个刚创建好的键值对的value引用。

3.2.3map中元素的修改

 

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Qt的入门

Qt的入门 1.Qt的配置2.介绍Qt的使用2.1 Qt 5.14.22.2 Linguist 5.14.22.3Designer 5.14.22.4 Assistant 5.14.22.5 Qt Creator 4.11.1 3.创建第一个项目3.1点击文件来新建一个新的文件或项目3.2选择项目路径和名称3.3选择构建工具3.4类信息3.5翻译文件3.6选择编译器3.7项目管理…

Redis 内存碎片是什么?如何清理?

Redis 内存碎片相关的问题在得物、美团、阿里、字节、携程等公司的后端面试中都曾出现过&#xff0c;还是建议认真准备一下。即使不是准备面试&#xff0c;日常开发也是能够用到的&#xff01; 什么是内存碎片? 你可以将内存碎片简单地理解为那些不可用的空闲内存。 举个例子&…

Python文件匹配技巧详解

概要 在日常的文件操作和数据处理中,文件匹配是一个非常常见的任务。Python 提供了丰富的库和工具来实现文件匹配,这些工具不仅功能强大,还易于使用。本文将详细介绍如何使用 Python 实现文件匹配,包括基本的文件操作、通配符匹配、正则表达式匹配以及实际应用场景,帮助更…

NewspaceGPT带你玩系列之美人鱼图表(思维导图)

目录 注册一个账号&#xff0c;用qq邮箱&#xff0c;然后登录选一个可用的Plus&#xff0c;不要选3.5探索GPT今天的主角是开始寻梦美人鱼图表我选第四个试一下问答 自定义问题&#xff1a;问答叙述文六要素&#xff1a;示例&#xff1a; 结论关注我&#xff0c;不迷路&#xff…

服务器安装JDK,Maven等常用环境

生产环境部署服务器需要安装一些常用工具&#xff0c;下面我就把常用的jdk&#xff0c;maven&#xff0c;node&#xff0c;git的安装方法和步骤演示 一、安装JDK环境 执行如下命令&#xff0c;安装JDK,所有命令都是 复制&#xff0c;粘贴&#xff0c;回车 yum install -y jav…

vue uniapp MEQX JWT认证

1.下载依赖 npm install mqttimport * as mqtt from "mqtt/dist/mqtt.min" ​ 我是用的uniapp vue3 vite这里尝试了很多方式,都导入不进去后来我就采用的本地引入方式, 把mqtt.min.js下载到本地然后在index.html 中导入<script src"./MEQX/mqtt.js" typ…

同三维T908转换器 SDI转DVI/HDMI/VGA/色差分量/AV转换器

同三维T908转换器 SDI转DVI/HDMI/VGA/色差分量/AV转换器 1路SDI进&#xff0c;1路DVI(可转HDMI/VGA/色差分量/AV)3.5音频1路SDI出,可以支持音频解嵌&#xff0c;也可把3.5音频加嵌转换输出&#xff0c;输出分辨率可调&#xff0c;支持图像翻转180度 一、产品简介 SDI转万能转…

新能源行业必会基础知识-----电力市场概论笔记-----经济学基础

新能源行业知识体系-------主目录-----持续更新(进不去说明我没写完)&#xff1a;https://blog.csdn.net/grd_java/article/details/139946830 目录 1. 什么是市场2. 电力市场机制设计的基本要求 1. 什么是市场 经济学定义 市场是供需双方交易并决定商品价格和产量的机制市场可…

【阅读论文】-- IDmvis:面向1型糖尿病治疗决策支持的时序事件序列可视化

IDMVis: Temporal Event Sequence Visualization for Type 1 Diabetes Treatment Decision Support 摘要1 引言2 1 型糖尿病的背景3 相关工作3.1 时间事件序列可视化3.2 电子健康记录可视化3.3 1 型糖尿病可视化3.4 任务分析与抽象 4 数据抽象5 层次化任务抽象5.1 临床医生工作…

华为BGP路由实验基础1------用物理口建立对等体

1.用物理口做BGP建立对等体建立BGP连接 实验拓扑&#xff1a; 实验步骤&#xff1a; 1.完成基本配置 sys [Huawei]sys AR1 [AR1]undo in e [AR1]int g0/0/0 [AR1-GigabitEthernet0/0/0]ip add 1.1.1.1 24 [AR1-GigabitEthernet0/0/0]q [AR1] sys [Huawei]sys AR2 [AR2]undo i…

用自己电脑部署大模型,私有化,很香!

这段时间一直在研究大语言模型私有部署的相关内容&#xff0c;相信大家也非常的感兴趣。 到目前为止&#xff0c;其实还是有很多的开源模型&#xff0c;其实大家去 GitHub Trending 上看看&#xff0c;就能够发现很多。 今天也是手把手地教大家怎么在自己的电脑上部署一个大语…

Qt—贪吃蛇项目(由0到1实现贪吃蛇项目)

用Qt实现一个贪吃蛇项目 一、项目介绍二、游戏大厅界面实现2.1完成游戏大厅的背景图。2.2创建一个按钮&#xff0c;给它设置样式&#xff0c;并且可以跳转到别的页面 三、难度选择界面实现四、 游戏界面实现五、在文件中写入历史战绩5.1 从文件里提取分数5.2 把贪吃蛇的长度存入…

如何断点调试opencv源码

分几个步骤&#xff1a; 1、下载opencv-4.10.0-windows.exe https://opencv.org/releases/ 2、想要调试opencv的源码&#xff0c;只需要将这两个文件拷贝到我们自己项目的可执行文件的同级目录内即可。 完成拷贝后&#xff0c;直接在vs工程中打断点F11进行单步调试&#xff…

ASP.NET MVC-简单例子-配置日志文件-log4net

环境&#xff1a; win10&#xff0c;SQL Server 2008 R2 安装 使用NuGet 安装时发现报错并无法安装&#xff1a; 现有 packages.config 文件中检测到一个或多个未解析包依赖项约束。必须解析所有依赖项约束以添加或更新包。如果正在更新这些包&#xff0c;则可忽略此消息&am…

2024-6-28 石群电路-32

2024-6-28&#xff0c;星期五&#xff0c;20:05&#xff0c;天气&#xff1a;雨&#xff0c;心情&#xff1a;晴。今天没有什么事情发生&#xff0c;继续学习&#xff0c;加油&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; 1. 对称三相电路的计算&#xff08…

算法基础--------【图论】

图论&#xff08;待完善&#xff09; DFS:和回溯差不多 BFS:进while进行层序遍历 定义: 图论&#xff08;Graph Theory&#xff09;是研究图及其相关问题的数学理论。图由节点&#xff08;顶点&#xff09;和连接这些节点的边组成。图论的研究范围广泛&#xff0c;涉及路径、…

学习笔记——动态路由——OSPF(OSPF协议的工作原理)

八、OSPF协议的工作原理 1、原理概要 (1)相邻路由器之间周期性发送HELLO报文&#xff0c;以便建立和维护邻居关系 (2)建立邻居关系后&#xff0c;给邻居路由器发送数据库描述报文(DBD)&#xff0c;也就是将自己链路状态数据库中的所有链路状态项目的摘要信息发送给邻居路由器…

【PHP项目实战训练】——后台-RBAC权限管理原理

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;开发者-曼亿点 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 曼亿点 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a…

Minecraft玩家设计专用程序 让Google地球可以在游戏中探索

在 Minecraft 中以真实的比例建造真实的地方并不是什么新鲜事。不过&#xff0c;康奈尔理工学院的一名毕业生最近展示了一种方法&#xff0c;可以自动生成一个忠实的 Minecraft 地球&#xff0c;并定期更新。他将在 7 月底举行的 SIGGRAPH 2024 大会上公布该项目的成果。 在七月…

确认偏差:金融市场交易中的隐形障碍

确认偏差&#xff0c;作为一种深刻影响交易员决策与表现的心理现象&#xff0c;其核心在于个体倾向于寻求与既有信念相符的信息&#xff0c;而自动过滤或轻视与之相悖的资讯。这种认知偏见严重扭曲了交易者的决策过程&#xff0c;导致他们过分依赖符合既有观念的数据&#xff0…