Map和Set的介绍

C++的STL 中 set.map multiset.multimap 学习使用详细讲解(含配套OJ题练习使用详细解答) 阅读详情

目录

1、Map 和 Set 的概念

2、模型

3、Map 的学习

3.1 关于 Map.Entry,v>

3.2 Map 的常用方法

 4、Set 的常用方法 

5、 Map 和 Set 的注意点


1、Map 和 Set 的概念

Java 提供了 Map 和 Set 的接口,是一种专门用来进行搜索的容器或数据结构,而他搜索的效率与其具体实例化的子类有关,比如 TreeMap 和 HashMap 的搜索效率就不一样。

如果利用学习到现在的知识,我们要去找一个元素,可能会采取遍历这样的方式,那么时间复杂度是 O(n),也可也采取二分查找,时间复杂度能达到 O(logn), 但必须要求数据是有序的。

如上所说的比较适合静态的查找,也就是一般不会对里面的元素进行插入和删除操作了。

那么假设我要根据学生的学号,找出对应的姓名,或者我要根据学生这样的一个对象,找出他对应的学校相关信息,再或者通讯录中,根据姓名,找出电话。

这些例子是生活中经常会碰到的,也就是在查找时,会更新里面的数据,比如这个学生退学了,就删除掉,即动态查找,那么上述遍历呀,二分查找呀,就不合适了,而 Map 和 Set 是一种适合动态查找的集合容器。

2、模型

通俗来讲,你去吃火锅,有俩宫格的,和单宫格的,甚至多宫格的,那么放在编程里,一般把需要搜索的数据称为关键字 key,和关键字对应的称为值 value,将它称为 Key-value 的键值对,所以模型会有两种:

Key-value 模型:

比如有个XX火锅vip客户表,上面对应每个vip客户来消费的次数,即 <vip客户,消费次数>
比如每个身份证所对应的人,即 <身份证,人>
纯 Key 模型:

比如老师上网课,会议中出现了一个叫 篮球哥 的人,于是让班长看下这个班级中有没有篮球哥这个人。
比如当你情敌发了个动态,你会看看你女神有没有给他点赞。
通过两个模型例子来看啊,键值对,也就是说大部分是对应关系,而纯 key 模型,大部分在找是否存在这个key,具体我们后面再细说。

而 Map 存储就是 Key-value 的键值对,Set 只存储了 Key


3、Map 的学习

3.1 关于 Map.Entry<K,V>


Map.Entry<K,V> 是 Map 内部实现用的来存放 <key,value> 键值对的内部类,可以理解成我们之前模拟实现链表时候里面的 Node 节点,也是一个内部类。

这个内部类中,主要提供了 <key,value> 的获取方法和 value 的设置:

方法    解释
K getKey()    返回当前 Entry<K,V>  对象中的 key
V getValue()    返回当前 Entry<K,V>  对象中的 value
V setValue(V value)    将键值对中的 value 进行替换指定的 value

注意:Entry<K,V> 并没有提供 key 的设置,key 的值一定是唯一的,不能重复!

3.2 Map 的常用方法

 4、Set 的常用方法 

 

5、 Map 和 Set 的注意点

Set 的底层是 Map 来实现的, 讲到后续会体现出来。

Map 没有继承 Iterator 所以不能返回迭代器,而 Set 继承了 Iterator 可以采用迭代器遍历:

 

Map 并没有继承 Collection,里面的 key 不能重复,而 Set 虽然继承了 Collection 但是底层实现还是 Map 所以 Set 中的 key 也不能重复。

HashSet 的基础上维护了一个双向链表来记实现Set接口的常用类有 TreeSet 和 HashSet,还有一个LinkedHashSet,LinkedHashSet是在录元素的插入次序。 

到这里先了解这么多,具体在后续的 TreeMap,TreeSet,HashMap,HashSet 会体现。
 


set 和map 的区别是什么? 需要根据具体的需求和数据结构特点来选择使用 Set 还是 Map。如果只需要存储唯一值并且不关心顺序,使用 Set;如果需要将值与键关联,并且需要根据键进行查找和操作,使用 Map。 阅读详情

相关推荐

MSP430项目设计:2020年TI杯大学生电子设计竞赛 坡道行驶电动小车(C题)循迹小车(分享项目展示视频与源码)

文章目录题目要求一、硬件设计二、理论分析与计算三、电路与程序设计四、测试方案与测试结果五、项目展示 哔哩哔哩项目展示视频:https://www.bilibili.com/video/BV1oz4y1d7mH/ 百度网盘资料链接:https://pan.baidu.com/s/1PC-lkSORH_XCgIG-u3HCog 提取码:c7zz 取走记得点赞啊! 题目要求 1.任务 利用TI的MSP430/MSP432平台,设计制作一个四轮电动小车。要求小车能沿着指定路线在坡道上自动循迹骑线行驶。小车必须独立

mbs706的博客 4万+

Map和Set

前言 一、pandas是什么? 二、使用步骤 总结

qq_774952435的博客 3929

西门子1500T系列凸轮同步(CAMIN指令用法)

添加凸轮工艺对象(TO_CAM),也就是凸轮表。开始编程,先写2个轴的使能、回原点与主轴的定位。监控主轴与从轴的位置、速度关系是否满足实验要求。1.添加工艺对象(1个定位轴,1个同步轴)调用CAMIN指令 ,凸轮耦合。主轴为旋转轴且为模数轴。3.调用插补凸轮盘指令。4.仿真、监控、调试。

gyxgyx789的博客 1万+

【数据结构】Map和Set

本期主要讲解: 1、Map 和 Set的概念 2、Map 和 Set 使用的模型 3、Map 3.1 Map.Entry 简介 3.2 Map的常用方法 4、Set 4.1 Set 和 Map 的区别 4.2 Set 的常用方法

拼命阿紫冲冲冲! 2195

VESC电调高级调参指南:电机校准与性能优化实战解析

本文详细解析了VESC电调的高级调参方法,包括电机校准与性能优化实战技巧。从基础参数设置到高级机械参数优化,再到动态性能调优,提供了全面的调参指南。特别针对电机类型、功率设置、电池参数配置等关键环节给出实用建议,帮助用户充分发挥VESC电调的性能潜力。

weixin_30772105的博客 196

Agentic AI为教育行业赋能,提示工程架构师解析应用潜力

然而,即便是最先进的 LLMs,在面对复杂、动态、需要持续规划和调整的教育场景时,也常常显得力不从心,它们更像是强大的“问答机器”,而非真正意义上的“学习伙伴”或“教学助手”。在教育场景中,传统的 AI 工具可能只能回答学生提出的特定问题,或者根据预设的规则推送一些学习材料。无论您是教育技术领域的开发者、产品经理,还是一线的教育工作者、教育管理者,抑或是对 AI 教育应用充满好奇的研究者,本文都将为您提供宝贵的 insights,助您把握 Agentic AI 时代教育创新的脉搏。

架构师的AI之路,分享AI应用开发架构的学习与实践。 466

【数据结构】 Map和Set详解

一般把搜索的数据称为关键字(Key),和关键字对应的称为值(Value),将其称之为Key-value的键值对,所以纯 key 模型,比如:有一个英文词典,快速查找一个单词是否在词典中快速查找某个名字在不在通讯录中Key-Value 模型,比如:统计文件中每个单词出现的次数,统计结果是每个单词都有与其对应的次数:梁山好汉的江湖绰号:每个好汉都有自己的江湖绰号而Map中存储的就是key-value的键值对Set中只存储了Key。

m0_71731682的博客 4172

(2-4-01)目标检测与分割:地面提取(1)

请看下面的例子,生成了虚拟 LiDAR 点云数据,然后使用 DBSCAN 聚类方法进行 LiDAR 地面提取,并根据聚类结果可视化地面和非地面点云。首先生成虚拟 LiDAR 点云数据,然后基于设定的高程阈值进行地面提取,并通过 Open3D 可视化地面和非地面点云。地面提取是LiDAR(激光雷达)数据处理中的一个重要步骤,其目标是从点云数据中分离出地面点,即地面表面上的点。LiDAR点云数据通常包含地面点和非地面点(例如建筑物、树木等),地面提取的目标是从这些点中准确识别和提取地面点。

码农三叔 703

【C++】map和set的介绍以及用法

我们来看看以下几个有关于set的要点:1.set是用来存储唯一元素的容器,且按照一定的顺序进行排列。2.set中不允许出现重复的元素,其本质是负责排序+去重。3.set在底层是用红黑树来实现的。4.set的比较默认按照小于进行。5.set的正向迭代器遍历为升序序列,反向迭代器为降序序列。6.在set类中的其内容可以进行删除,但不支持修改。7.set中查找某个元素的时间复杂度为logN。map是C++中STL的一个关联式容器,它是以键值对。

2301_81044829的博客 1988

突破Cloudflare 5秒盾!Python爬虫+GPT分析JS混淆实战(附完整代码)

这篇文章的核心观点其实不是“怎么过CF”,而是如何把LLM嵌入逆向工程的工作流。AI不会取代逆向工程师,但它正在重新定义逆向工程师的工作方式。过去我们80%的时间花在读懂混淆代码上,现在这部分可以外包给GPT,我们把精力集中在架构判断、异常处理和系统设计这些真正需要人类直觉的地方。技术会变,CF的防护会升级,GPT的能力也会迭代。但这种“人机协作拆解复杂问题”的方法论,比任何具体的绕过技巧都更有长期价值。参考资料Cloudflare Bot Management官方文档。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 535

用一台笔记本跑起 SAP HANA:从 express edition 的定位,到本地硬件门槛与安装实操

SAP HANA是面向个人开发者、初创团队与教学科研场景的精简发行版,保留了in-memory列存引擎、SQLScriptAFLGraphSpatial等核心能力,可免费用于开发与一定规模的生产用途(上限为 32 GB RAM)。它最大的特征,是能在资源受限的laptop或上快速落地,让你在本地完成从建模、开发到测试的完整闭环。SAP在交付形态上,提供了多种安装包:预配置的VM OVA、面向Linux的二进制安装包,以及历史上出现过的容器化方案;你可以按现有设备与熟悉的运维方式择优选择。官方文档把VM。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 536

【Java 数据结构】Map和Set的介绍

本期主要讲解: 1、Map 和 Set 的概念 2、模型 3、Map 的学习 3.1 关于 Map.Entry 3.2 Map 的常用方法 4、Set 的常用方法 5、 Map 和 Set 的注意点

程序猿教你打篮球的博客 6274

基于CNN-LSTM融合模型的环卫车动态称重算法研究:从频率感知到精准质量估计

摘要: 针对环卫车辆动态称重需求,本研究提出一种基于CNN-LSTM融合网络的频率分析方法。通过在实验室构建振动频率采集系统,获取不同载重下的结构响应数据,经MATLAB进行信号处理和特征提取后,建立频率-质量的非线性映射模型。实验表明,该算法在静态和模拟动态场景下平均绝对误差小于1.5%,显著优于传统方法,为环卫车智能化管理提供了高精度实时称重方案。 关键词: 动态称重;深度学习;频率分析;CNN-LSTM;MATLAB。

AI的内部世界的博客 374

《map和set的使用介绍》

set的声明如下,T就是set底层关键字的类型set默认要求T⽀持小于比较,如果不支持或者想按自己的需求走可以自行实现仿函数传给第二个模版参数。2.·set底层存储数据的内存是从空间配置器申请的,如果需要可以自己实现内存池,传给第三个参数。一般情况下,我们都不需要传后两个模版参数。set底层是用红黑树实现,增删查效率是O(logN),迭代器遍历是走的搜索树的中序,所以是有序的。前面部分我们已经学习了vectorlist等容器的使用,STL。

2401_87465145的博客 944

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

C++map和set的介绍及使用

C++map和set的介绍及使用零、前言一、关联式容器二、键值对三、C++中的set1、set的介绍2、set的使用四、C++中的multiset五、C++中的map1、map的介绍2、map的使用六、C++中的multimap 零、前言 本章主要讲解C++中的关联式容器map和set的介绍及其使用 一、关联式容器 容器分类: 序列式容器:初阶阶段中学习过STL中的部分容器,如:vector、list、deque等,这些容器统称为序列式容器,因为其底层为线性序列的数据结构,里面存储的是元素本身

~ 4251

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

STL——map和set的介绍

前面我们介绍了二叉搜索树的实现以及key/value模型的模拟实现,基于上述知识点,我们可以引入C++的两个关联式容器:map/set,其中set的底层是key模型,map的底层是key/value模型,有了这两个容器,可以帮助我们解决诸如去重、排序等问题,那么废话不多说,接下来就让我们一起来学习map和set的使用吧。数据结构(四)——二叉搜索树的实现(C++版)二叉搜索树与Key/Value模型。

f040731_007的博客 840

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

【C++】map和set的介绍及使用

set的声明如下,T就是set底层关键字的类型set默认要求T⽀持⼩于⽐较,如果不⽀持或者想按⾃⼰的需求⾛可以⾃⾏实现仿函数传给第⼆个模 版参数set底层存储数据的内存是从空间配置器申请的,如果需要可以⾃⼰实现内存池,传给第三个参 数。⼀般情况下,我们都不需要传后两个模版参数。set底层是⽤红⿊树实现,增删查效率是 ,迭代器遍历是⾛的搜索树的中序,所以是有序 的。O(logN)

2301_78724721的博客 1236

map和set介绍

map和set基础使用

Yang_DX1的博客 806

《C++ map和set的介绍及使用》

此篇主要对set和map、multiset和multimap做了简单的理解和相关应用的举例。关于其他的接口,由于和STL中vector、list、string等接口类似,这里没有做具体讲解,只做了特别的几个接口的说明。关于set和map更深层次的探索,请看下篇。

2202_75924820的博客 2163

STL——map和set【map和set的介绍和使用】【multimap和multiset】

有关map和set容器的学习和使用【multimap和multiset的拓展学习】【有关map中[]的使用和原理详细解析】【map和set相关oj】

aaa114514aaaa的博客 1752

Map和Set详细介绍~

Map和Set详细介绍~

qq_57603004的博客 4933

介绍下 Set、Map、WeakSet 和 WeakMap 的区别

1.set 基本用法 ES6 提供了新的数据结构 Set。它类似于数组,但是成员的值都是唯一的,没有重复的值。 Set本身是一个构造函数,用来生成 Set 数据结构。 const s = new Set(); [2, 3, 5, 4, 5, 2, 2].forEach(x => s.add(x)); for (let i of s) { console.log(i); } ...

手掌日月摘星辰 4123

C++: map和set介绍

C++: map和set介绍

2301_82256131的博客 815

C++11STL容器map和set简单介绍

map和set底层都是红黑树,是二叉搜索树的一种,查找非常快。不像数组、链表一样一个一个对比,可以理解为创建一个非常适合使用二分查找的结构,每次查找都可以排除掉上一次排除元素的一半。下面小编来介绍一个非常有意思的二叉树结构——二叉搜索树。

John1214的博客 676

map 和 set 的介绍和简单使用

原因是,operator[] 通常用于直接访问容器中特定键 (Key) 对应的值 (Value),而对于 std::multimap 这种允许一个键关联多个值的容器来说,使用 operator[] 并不明确应该返回哪个值 (Value),此时的 operator[] 的行为就变得模糊不清。最后,(*((this->insert(std::make_pair(k, mapped_type()))).first)).second 取得插入的键值对中值 (Value) 所在的部分,即当前插入的键所对应的值。

m0_62229058的博客 759

map 与 set 和 multiset 与 multimap 的介绍

map与set,multiset与multimap 的介绍及操作详解

2301_77509762的博客 1430
上一篇: 神级编程网站,堪称程序员的充电站,我给你找好了不能错过
下一篇: MySQL有哪些优化技巧呢
猿伺服
博客等级 码龄5年 102粉丝 13原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值