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。 阅读详情

相关推荐

MEME-CHIP实战:5步搞定ChIP-seq数据中的motif发现与可视化

本文提供了使用MEME-CHIP工具进行ChIP-seq数据motif发现与可视化的完整实战指南。通过5个清晰步骤,从数据准备、环境搭建、命令行执行到结果解读与高级可视化,详细讲解了如何利用MEME-CHIP工作流高效完成从原始peak序列到发表级motif图的分析,并分享了关键的参数调优与避坑经验。

alice7model的博客 508

Map和Set

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

qq_774952435的博客 3929

Visual Studio 6.0 镜像下载全指南:从企业版到中文版

本文提供Visual Studio 6.0企业版和中文版的镜像下载全指南,包括详细版本解析、已验证的下载链接及校验信息。针对现代系统的安装技巧和兼容性处理方案,帮助开发者高效获取并运行这一经典开发工具,特别适合维护遗留系统的专业人员。

weixin_33712987的博客 1039

【数据结构】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

骨架动作识别新突破:CTR-GCN的通道拓扑优化策略解析

本文深入解析了CTR-GCN在骨架动作识别中的通道拓扑优化策略。通过引入通道级拓扑细化,CTR-GCN克服了传统GCN共享拓扑结构的局限性,显著提升了动作识别的准确率。文章详细介绍了CTR-GCN的三大核心组件设计,包括特征变换模块、通道拓扑建模和通道聚合技术,并提供了实战调参经验和模型压缩技巧,为计算机视觉领域的研究者和开发者提供了有价值的参考。

weixin_27310417的博客 193

RocketMq面板访问异常 com.alibaba.fastjson.JSONException: not close json text, token : string

rocketmq JSONException: not close json text, token : string 问题解决

qq_21067307的博客 5573

【数据结构】 Map和Set详解

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

m0_71731682的博客 4172

π_RL:解锁流匹配VLA强化学习后训练的关键技术与实战解析

本文深入解析了π_RL框架如何通过流匹配(flow matching)与强化学习(RL)的结合,解决视觉语言动作模型(VLA)在后训练中的关键挑战。详细介绍了Flow Noise和Flow SDE两大核心技术,以及它们在机器人控制任务中的实战效果,显著提升了模型的性能、数据效率和泛化能力。

weixin_29061531的博客 220

【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

从零开始之驱动发开、linux驱动(七、字符驱动之led最终版)

我们上一接用的gpiolib非常杂乱,使用了两种 1.各硬件厂商实现的,如s3c_gpio_cfgpin(S5PV210_GPJ0(5), S3C_GPIO_SFN(1)) 2.系统公共的,如gpio_set_value(S5PV210_GPJ0(4),val) 其实公共的也是对各硬件厂商的封装,用那个都可以,个人建议用系统公共的,应为这样换芯片厂商,不影响任何使用。   2.错误处理基...

To_run_away的博客 2387

uboot引导vxworks--t2080调试记录

开发环境: t2080rdb, uboot2015, vxworks7.01. 《VxWorks_7_fsl_t2t4_BSP_Supplement_Guide__SR0620.pdf》描述: 实际上默认创建的vip,profile选项为none时,vip内核配置中是包含了INCLUDE_END选项的。所以在创建vip的时候最好就添加上PROFILE_DEVELOPMENT。 2. 内核参数bootargs是一些网络参数设置=> pri bootargs bootargs=memac(1,0)b109304

珂珂可爱多 2642

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

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

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

吃透工业通信:C#工控机实现Modbus、OPC UA、Profinet、EtherCAT协议全适配

本文介绍了基于C#的工业通信协议全适配方案,采用分层架构设计实现Modbus、OPC UA、Profinet和EtherCAT四种主流协议的统一管理。核心包括:1)三层架构(应用层、抽象层、协议层)降低耦合;2)定义统一通信接口IIndustrialCommunication;3)工厂模式创建不同协议实例;4)以Modbus TCP为例展示具体实现。该方案经过实际项目验证,可简化多协议设备管理,提升工业自动化系统的开发效率。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 723

《map和set的使用介绍》

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

2401_87465145的博客 944

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

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

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

STL——map和set的介绍

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

f040731_007的博客 840

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

【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、付费专栏及课程。

余额充值