【STL】map容器

news2025/1/21 18:56:32

map

作为关联式容器的一种,map容器存储的都是pair对象,也就是用pair类模板创建的键值对。其中,各个键值对的键和值可以是任意数据类型,包括C++基本数据类型、使用结构体或类自定义的类型。

默认情况下,map容器选用std::less< T >排序规则(其中T表示键的数据类型),其会根据键的大小对所有键值对做升序排序。当然,根据实际情况的需要,我们可以手动指定map容器的排序规则,既可以选用STL标准库中提供的其他排序规则(比如std::greater< T >),也可=可以自定义排序规则。

使用map容器存储的各个键值对,键的值既不能重复也不能被修改。

构造方法

map<string,int>myMap;

类似于set,可以使用这种方式创建一个空的map。此时的map中没有任何键值。

在这里插入图片描述
此外还可以进行直接初始化的创建。由于map的本质也是储存一个pair类型,因此可以直接使用pair进行初始化
在这里插入图片描述
同set一样,可以使用拷贝的方式进行构造。
在这里插入图片描述

成员方法

begin()
返回指向容器中第一个(注意,是已排好序的第一个)键值对的双向迭代器。如果map容器用const限定,则该方法返回的是const类型的双向迭代器。
end()
返回指向容器的最后一个元素(注意,是已排好序的最后一个)所在位置后一个位置的双向迭代器,通常和begin()结合使用。如果map容器用const限定,则该方法返回的是const类型的双向迭代器。
rbegin()
返回指向最后一个(注意,是已排好序的最后一个)元素的反向双向迭代器。如果map容器用const限定,则该方法返回的是const类型的反向双向迭代器。
rend()
返沪指向第一个(注意,是已排好序的第一个)元素所在位置前一个位置的反向双向迭代器。如果map容器用const限定,则该方法返回的是const类型的反向双向迭代器。
find(key)
在map容器中查找键为key的键值对,如果成功找到,则返回指向该键值对的双向迭代器;反之,则返回和end()方法一样的迭代器。另外,如果map容器用const限定,则该方法返回的是const类型的双向迭代器。
lower_bound(key)
返回一个指向当前map容器中第一个大于或等于key的键值对的双向迭代器。如果map容器用const限定,则该方法返回的是const类型的双向迭代器。
upper_bound(key)
返回一个指向当前map容器中第一个大于key的键值对的迭代器。如果map容器用const限定,则该方法返回的是const类型的双向迭代器。
empty()
若容器为空,则返回true;否则返回false
size()
返回当前map容器中存有键值对的个数
operator[]
map容器重载了[]运算符,只要知道map容器中某个键值对的键的值,就可以向获取数组中元素那样,通过键直接获取对应的值。
at(key)
找到map容器中key键对应的值,如果找不到,该函数会引发out_of_range异常。
insert()
向map容器中插入键值对
erase()
删除map容器指定位置、指定键(key)值或者指定区域内的键值对。
swap()
交换2个map容器中存储的键值对,这意味着,操作的2个键值对的类型必须相同。
clear()
清空map容器中所有的键值对,即使map容器的size()为0
emplace()
在当前map容器中的指定位置处构造新键值对。其效果和插入键值对一样,但效率更高。
count(key)
在当前map容器中,查找键为key的键值对的个数并返回。注意,由于map容器中各键值对的键的值是唯一的,因此该函数的返回值最大为1

map的迭代器访问元素的方式:
itetator->first:访问键
iterator->secondfang:访问值

元素访问

map提供了两种访问元素的方式
at()
operator()
at()
at()成员方法也需要根据指定的键,才能从容器中找到该键对应的值;不同之处在于,如果在当前容器中查找失败,该方法不会向容器中添加新的键值对,而是直接抛出out_of_range异常。
在这里插入图片描述
在这里插入图片描述
operation[]
借助重载的[]运算符才能成功获取该键对应的值;反之,若当前map容器中没有包含该指定键的键值对,则此时使用[]运算符将不再是访问容器中的元素,而变成了向该map容器中添加一个键值对。其中键是指定的键,值是’
\0‘;
在这里插入图片描述
在这里插入图片描述
比较而言,[]更容易对原始数据造成干扰,以此更推荐使用at()访问成员。

multimap(了解)

map容器的区别在于,multimap容器中可以同时存储多(≥2)各键相同的键值对。
由于multimap与map有许多相似之处,此处只考虑不同之处,而不做赘述。
成员访问
和map容器相比,multimap未提供at()成员方法,也没有重载[]运算符。这意味着,map容器中通过指定键获取指定键值对的方式,将不再适用于multimap容器。其实这很好理解,因为multimap容器中指定的键可能对应多个键值对,而不再是1个。
因此它更多用来进行统计,或使用迭代器进行访问。

undered_map

无序容器,与map有很大区别
关联式容器的底层实现采用的树存储结构,更确切地说是红黑树结构
无序容器的底层实现采用的是哈希表的存储结构

由于有不同的数据结构支撑,因此有着不同的性质。
1.无序容器内部存储的键值对是无序的,各键值对的存储位置取决于该键值对中的键
2.和关联式容器相比,无序容器擅长通过指定键查找对应的值(平均时间复杂度为O(1));但对于使用迭代器遍历容器中存储的元素,无序容器的执行效率则不如关联式容器。

除此之外,它的用法和map完全一致,因此不再一一赘述。

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

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

相关文章

vmware虚拟机centos7扩容

vmware先进行磁盘扩展 从原来的20G扩展到100G: 扩展磁盘时可能会遇到需要修复磁盘的情况: // 进入vmware安装目录cd D:\开发工具\VMWare\ // 修复, 其中.vmdk文件为虚拟机磁盘文件vmware-vdiskmanager -R "F:\VM_Centos\CentOS 7 64 位.vmdk" 扩展成功&#xff1…

mysql死锁介绍以及解决

什么是死锁 死锁是2个线程在执行过程中&#xff0c; 因争夺资源而造成的相互等待的现象&#xff0c;若无外力作用&#xff0c;它们将无法推进下去。 死锁产生的4个必要条件 互斥条件 指进程对所分配的资源进行排他性使用&#xff0c;即一段时间内某资源只有一个进程占用&#…

TC277的Ovc功能

TC277的Ovc功能 文章目录前言Data Access Overlay (OVC)<br>特点和功能概述数据访问重定向目标内存地址Online Data Acquisition (OLDA) SpaceOverlay MemoriesLocal MemoryEmulation MemoryDSPR & PSPR MemoryGlobal Overlay ControlGlobal Overlay Control Synchro…

控制算法-模型预测MPC

本文记录一下MPC控制算法的学习过程和自己的理解&#xff0c;初步接触控制算法&#xff0c;理解肯定不是很完善&#xff0c;重在记录思考的过程。 背景 随着自动驾驶技术以及机器人控制技术的不断发展及逐渐火热&#xff0c;模型预测控制(MPC)算法作为一种先进的控制算法&…

LeetCode 202. 快乐数

题目链接&#xff1a;https://leetcode.cn/problems/happy-number/ 思路如下&#xff1a; 由题目可知&#xff0c;nnn 的取值在 [1,231−1][1, 2^{31}-1][1,231−1] 的范围内&#xff0c;在 [1,2147483647][1, 2147483647][1,2147483647] 这个区间里面&#xff0c;平方和最大…

【博客544】golang pprof性能调试:寻找memory瓶颈

golang pprof性能调试&#xff1a;寻找memory瓶颈 1、前置 pprof的使用与输出列解析看姐妹篇&#xff1a;golang pprof性能调试&#xff1a;寻找cpu瓶颈 2、引入pprof到程序中&#xff0c;以调试memory瓶颈 给程序加入&#xff1a; import _ "net/http/pprof"go…

Java 8 集合 Stream

Java 8 是一个成功的版本&#xff0c;新增的内容很实用。比如大家熟悉的 lamda 表达式&#xff0c;集合的 Stream&#xff0c;等等。 本文讲讲 Stream 的使用。 Stream 是什么&#xff1f; Stream 将要处理的集合看做流&#xff0c;然后方便的对流做操作&#xff0c;比如筛选…

node日志log4js库使用示例

在node开发或者electron项目开发中&#xff0c;我们可能需要记录日志的功能&#xff0c;便于我们出错排查问题。今天介绍node中的日志库log4js。 log日志记录&#xff0c;一般需要配置日志记录的级别&#xff0c;日志输出类型&#xff0c;日志格式等信息。log4js可以在初始化的…

ssh免密登陆

文章目录一、免密登陆1、生成密钥对2、将公钥拷贝到所创建的虚拟机上3、测试免密登陆成功没有二、遇到免密登陆失败的解决办法解决办法1、修改机器名&#xff0c;去掉.novalocal后缀2、重新做免密登录一、免密登陆 ssh密钥登录比密码登录安全&#xff0c;主要是因为他使用了非…

Spring - BeanPostProcessors 扩展接口

文章目录PreBean的生成过程org.springframework.beans.factory.config.BeanPostProcessor 介绍ApplicationContext注册Bean PostProcessor源码解析AbstractApplicationContext#refreshAbstractApplicationContext#registerBeanPostProcessorsPostProcessorRegistrationDelegate…

InnoDB底层存储结构探秘

一 innoDB 为什么不用平衡二叉树 计算机存储层次结构 计算机存储设备一般分为两种&#xff1a;内存储器(main memory)和外存储器(external memory)。 内存储器为内存&#xff0c;内存存取速度快&#xff0c;但容量小&#xff0c;价格昂贵&#xff0c;而且不能长期保存数据(在…

动物大全和动物识别系统毕业设计,动物大全和动物AI识别系统设计与实现,动物识别系统论文毕设作品参考

功能清单 【后台管理员功能】 系统设置&#xff1a;设置网站简介、关于我们、联系我们、加入我们、法律声明 广告管理&#xff1a;设置小程序首页轮播图广告和链接 留言列表&#xff1a;所有用户留言信息列表&#xff0c;支持删除 会员列表&#xff1a;查看所有注册会员信息&a…

第七届NVIDIA Sky Hackathon项目报告书

系列文章目录 数据集收集和标注情况 1.1ASR语音数据集收集和标注情况 1.2CV图像数据集收集和标注情况进行模型的训练 2.1进行ASR模型的训练 2.2进行CV模型的训练在Jetson平台进行部署和推理 3.1部署和推理ASR模型 3.2部署和推理CV模型优化UI界面 文章目录系列文章目录1. 数据集…

详解BFS,Dijkstra算法,Floyd算法是如何解决最短路径问题的

目录 1.BFS算法 2.Dijkstra算法 3.Floyd算法 4.总结 1.BFS算法 G纲是个物流离散中心&#xff0c;经常需要往各个城市运东西&#xff0c;怎么运送距离最近——单源最短路径问题 各个城市之间也学要来往&#xff0c;相互之间怎么走距离最近&#xff1f;——每对顶点之间的最…

GNS3学习笔记

文章目录GNS3学习笔记一、GNS3支持的设备列表有哪些1、在安装根目录下 XXX\GNS3\appliances2、The NAT node 怎么使用二、GNS3使用错误汇总1、iosVL2 image(qemu平台)启动后进不去系统&#xff0c;一直重复进入开机界面三、参考链接1、GNS3应该使用那个模拟平台2、怎么集成VM到…

〖全域运营实战白宝书 - 运营角色认知篇⑧〗- 运营人的发展路径

大家好&#xff0c;我是 哈士奇 &#xff0c;一位工作了十年的"技术混子"&#xff0c; 致力于为开发者赋能的UP主, 目前正在运营着 TFS_CLUB社区。 &#x1f4ac; 人生格言&#xff1a;优于别人,并不高贵,真正的高贵应该是优于过去的自己。&#x1f4ac; &#x1f4e…

Flink源码解析(一、source原理)

文章目录背景逻辑原理connector架构sql处理阶段代码实例代码debug参考文献背景 source/sink 是flink最核心的部分之一&#xff0c;通过对其实现原理的学习&#xff0c;结合源码debug&#xff0c;有助于加深对框架处理过程的理解&#xff0c;以及架构设计上的提升。 逻辑原理 …

详细介绍 Oracle中的Materialized Views(物化视图/快照)

A materialized view (snapshot) is a table segment whose contents are periodically refereshed based on query (against a local or remote table)(针对的本地或者远程表) The simplest way to achieve replication of data between sites for against remote tables: ma…

中断上下文和进程上下文

中断上下文 参考博客&#xff1a;(https://blog.csdn.net/AndroidBBC/article/details/81911065) 中断上半部分&#xff0c;中断触发&#xff1b;中断下半部分&#xff0c;中断执行。 中断执行一般有tasklet、工作队列实现 工作队列机制 工作队列所执行的中断代码会表现出进…

Linux | 第一篇——常见指令汇总【超全、超详细讲解】

Linux之常见指令&#x1f333;前言&#x1f4bb;操作系统的概念&#x1f4bb;Linux的使用环境介绍&#x1f333;基本指令汇总一、【whoami】指令二、【pwd】指令三、【mkdir】指令四、【touch】指令五、【ls】指令1、拓展&#xff1a;文件的概念2、命令 - 命令选项六、【cd】指…