met和set的特性及区别

news2024/10/7 6:43:10

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中元素的修改

 

 

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

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

相关文章

[论文阅读笔记32] Object-Centric Multiple Object Tracking (ICCV2023)

最近Object centric learning比较火, 其借助了心理学的概念, 旨在将注意力集中在图像或视频中的独立对象&#xff08;objects&#xff09;上&#xff0c;而不是整个图像。这个方法与传统的基于像素或区域的方法有所不同&#xff0c;它试图通过识别和分离图像中的各个对象来进行…

详细的介绍匀加速运动的物理方程是如何转化为卡尔曼滤波的状态空间模型的

详细的介绍匀加速运动的物理方程是如何转化为卡尔曼滤波的状态空间模型的 flyfish 加速度是描述物体速度变化快慢的物理量&#xff0c;定义为速度对时间的变化率。数学上&#xff0c;它表示为&#xff1a; a Δ v Δ t a \frac{\Delta v}{\Delta t} aΔtΔv​ 其中&#xf…

[图解]SysML和EA建模住宅安全系统-02-现有运营领域-块定义图

1 00:00:00,840 --> 00:00:02,440 首先我们来看画在哪里 2 00:00:02,570 --> 00:00:08,310 你看&#xff0c;这是图的类型&#xff0c;图里面内容 3 00:00:08,320 --> 00:00:10,780 这是元素类型 4 00:00:10,790 --> 00:00:14,900 这是位置&#xff0c;哪个包 …

中国计量大学2024年成人高等继续教育招生简章

中国计量大学&#xff0c;作为一所享有盛誉的高等学府&#xff0c;始终秉持着“精益求精&#xff0c;追求卓越”的办学理念&#xff0c;致力于为社会培养各类优秀人才。在2024年&#xff0c;我校继续秉承这一传统&#xff0c;全面启动成人高等继续教育招生工作&#xff0c;为广…

KVB App:金价看涨动能不足,关注美国PCE数据

当前市场状况 截至2024年6月28日&#xff0c;现货黄金价格震荡走弱&#xff0c;一度失守2320美元/盎司关口&#xff0c;目前交投于2322.65美元/盎司附近。KVB首席分析师Valeria Bednarik指出&#xff0c;黄金价格目前缺乏看涨动能&#xff0c;市场焦点转向美国个人消费支出(PC…

python中pip换源

目录 1. 背景2. Python 的 pip 换源2.1 临时换源&#xff08;命令行中使用参数&#xff09;2.2 永久换源&#xff08;修改配置文件&#xff09;2.2.1 Windows系统2.2.2 Linux/macOS系统 2.3 使用 pip-config 命令换源&#xff08;Linux/macOS 特定&#xff09; 3. 常用的 PyPI …

嵌入式Linux系统编程 — 4.7 regcomp、regexec、regfree正则表达式函数

目录 1 为什么需要正则表达式 2 正则表达式简介 3 正则表达式规则 4 regcomp、regexec、regfree函数 4.1 函数介绍 4.2 URL格式案例 1 为什么需要正则表达式 在许多的应用程序当中&#xff0c; 有这样的应用场景&#xff1a; 给定一个字符串&#xff0c;检查该字符串是否…

数字信号处理实验三(IIR数字滤波器设计)

IIR数字滤波器设计&#xff08;2学时&#xff09; 要求&#xff1a; 产生一复合信号序列&#xff0c;该序列包含幅度相同的28Hz、50Hz、100Hz、150Hz的单音&#xff08;单频&#xff09;信号&#xff1b;其中&#xff0c;50Hz及其谐波为工频干扰&#xff08;注&#xff1a;采样…

Git与GitLab的企业实战--尚硅谷git课程

Git与GitLab的企业实战 第1章 Git概述 Git是一个免费的、开源的分布式版本控制系统&#xff0c;可以快速高效地处理从小型到大型的各种项目。 Git易于学习&#xff0c;占地面积小&#xff0c;性能极快。 它具有廉价的本地库&#xff0c;方便的暂存区域和多个工作流分支等特性…

揭秘系统架构:从零开始,探索技术世界的无限可能

文章目录 引言一、系统架构的基本概念二、系统架构的设计原则模块化可扩展性高可用性安全性 三、常见的系统架构模式1. **分层架构&#xff08;Layered Architecture&#xff09;**&#xff1a;2. **微服务架构&#xff08;Microservices Architecture&#xff09;**&#xff1…

微信视频号里面的视频怎么下载,分享4个视频号视频下载方法!可长期使用

如何在微信视频号里下载视频,虽然互联网上微信视频号视频下载方法千千万&#xff0c;奈何总有一些方法不起任何作用. 如何解决这一问题&#xff0c;今天就分享3个可以下载微信视频号的视频方法仅供参考。 1:提取器助手 手机搜索提取器助收/扫码获取视频号下载小助手二维码。该…

G882磁力仪拖鱼位置是如何计算的?

根据参考文献&#xff0c;磁力仪拖鱼位置计算有两种方法&#xff1a; 1、直线法 直线计算法是假设不考虑海流、船摆等动态因素的影响&#xff0c;拖鱼与拖点始终和航向相同&#xff0c;即整个拖拽系统与船舶是刚性连接。 2、曲线法 实际海洋磁力测量中&#xff0c;在海风、海…

6.24.4.2 YOLO- logo:一种基于变压器的YOLO分割模型,用于数字乳房x光片中乳腺肿块的检测和分割

背景与目的:数字化乳房x光片的肿块检测和分割在乳腺癌的早期发现和治疗中起着至关重要的作用。此外&#xff0c;临床经验表明&#xff0c;它们是乳腺病变病理分类的上游任务。深度学习的最新进展使分析更快、更准确。本研究旨在开发一种用于乳房x线摄影的乳腺癌质量检测和分割的…

柯桥在职学历提升|专科本科之自考本科哪些专业不考数学

一、管理类专业 这类专业综合性和理论性比较强&#xff0c;除了涉及到管理学相关的理论知识外&#xff0c;还有相应的专业知识&#xff0c;目前比较典型的专业有&#xff1a;行政管理、人力资源管理、工商管理&#xff08;现代企业管理&#xff09;、工商管理&#xff08;商务管…

【websocket】websocket网课视频记录

仅个人方便回顾。 【WebSocket入门与案例实战-哔哩哔哩】 https://b23.tv/2p1f9t2 课程对应代码仓库: https://gitee.com/duoli-java/websocket-demo.git

SpringBoot防抖方案(防止表单重复提交)

SpringBoot防抖方案&#xff08;防止表单重复提交&#xff09; 1.应用场景&#xff08;什么是防抖&#xff09; 所谓防抖&#xff0c;一是防用户手抖&#xff0c;二是防网络抖动。在Web系统中&#xff0c;表单提交是一个非常常见的功能&#xff0c;如果不加控制&#xff0c;容…

Selenium IDE 的使用指南

Selenium IDE 的使用指南 在自动化测试的领域中&#xff0c;Selenium 是一个广为人知且强大的工具集。而 Selenium IDE 作为其中的一个组件&#xff0c;为测试人员提供了一种便捷且直观的方式来创建和执行自动化测试脚本。 一、Selenium IDE 简介 Selenium IDE 是一个用于录…

GRS认证流程是什么?

GRS认证的认证流程主要包括以下几个步骤&#xff1a; 1. 提交申请 首先&#xff0c;企业需要向GRS认证机构提交认证申请&#xff0c;并提供相关的企业信息和产品信息。这通常包括企业的基本信息、生产工厂信息、产品范围、生产流程等。 2. 合同评审 认证机构会对企业提交的…

基于java语言+springboot技术架构开发的 互联网智能3D导诊系统源码支持微信小程序、APP 医院AI智能导诊系统源码

基于java语言springboot技术架构开发的 互联网智能3D导诊系统源码支持微信小程序、APP 医院AI智能导诊系统源码 一、智慧导诊系统开发原理 导诊系统从原理上大致可分为基于规则模板和基于数据模型两类。 1、基于规则推理的方法通过人工建立症状、疾病和科室之间的对应规则实现…

5G VONR

转载&#xff1a;VoNR呼叫流程介绍 (baidu.com) 使用5G RAN、5G Core和IMS的语音服务被称为新无线电VoNR上的语音&#xff0c;5G提供语音/视频通话等服务。 NR网络架构上的语音 NR语音网络体系结构由5G RAN、5G Core和IMS网络组成。下面显示了一个体系结构。&#xff08;仅包…