C++map的详解和常用接口

【C++之容器篇】map和set常见函数接口的使用与剖析 map和set是数据结构中非常常用的结构,这两个结构都属于二叉搜索树,set中的结点存储的是关键字,map中的结点存储的是键值对。set和map都只支持存储唯一一个关键字,不允许关键字冗余,但是其衍生出来的multiset和multimap数据结构就支持存储多个关键子,下面将通过实际代码来详细介绍这两类数据结构的使用。 阅读详情

在 C++ 中,map是一种关联容器,它存储的是键值对(key-value pairs),并且根据键(key)进行排序。map中的键是唯一的,而值可以根据需要重复。map内部通常使用红黑树实现,这使得插入、删除和查找操作都具有对数时间复杂度O(logn)。

1. 头文件

使用map需要包含<map>头文件:

#include <map>

2. 定义和初始化

  • 定义一个空的map:
std::map<int, std::string> myMap;

这里定义了一个map,键的类型是int,值的类型是std::string。

  • 初始化map:
std::map<int, std::string> myMap = {
    {1, "one"},
    {2, "two"},
    {3, "three"}
};

3. 常用接口

插入元素
  • 使用insert方法:
myMap.insert(std::make_pair(4, "four"));
// 或者使用花括号初始化列表
myMap.insert({5, "five"});
  • 使用operator[]:
myMap[6] = "six";

operator[]在插入元素时,如果键不存在,会自动创建一个新的键值对;如果键已存在,会更新对应的值。

访问元素
  • 使用at方法:
std::string value = myMap.at(2);

at方法会检查键是否存在,如果不存在会抛出std::out_of_range异常。

  • 使用operator[]:
std::string value2 = myMap[2];

operator[]如果键不存在,会插入一个默认值的键值对。因此,operator[]不适合用于只读访问。

查找元素
  • 使用find方法:
auto it = myMap.find(3);
if (it!= myMap.end()) {
    std::cout << "Found key 3 with value: " << it->second << std::endl;
}

find方法返回一个迭代器,指向找到的键值对;如果没有找到,返回map的end()迭代器。

删除元素
  • 使用erase方法:
// 根据键删除
myMap.erase(4);
// 根据迭代器删除
auto it2 = myMap.find(5);
if (it2!= myMap.end()) {
    myMap.erase(it2);
}
获取大小
  • 使用size方法:
size_t mapSize = myMap.size();
检查是否为空
  • 使用empty方法:
bool isEmpty = myMap.empty();
遍历map
  • 使用范围for循环:
for (const auto& pair : myMap) {
    std::cout << pair.first << ": " << pair.second << std::endl;
}
  • 使用迭代器:
for (auto it = myMap.begin(); it!= myMap.end(); ++it) {
    std::cout << it->first << ": " << it->second << std::endl;
}

示例代码

#include <iostream>
#include <map>
#include <string>

int main() {
    std::map<int, std::string> myMap = {
        {1, "one"},
        {2, "two"},
        {3, "three"}
    };

    // 插入元素
    myMap.insert({4, "four"});
    myMap[5] = "five";

    // 访问元素
    std::cout << "Value of key 2: " << myMap.at(2) << std::endl;
    std::cout << "Value of key 3: " << myMap[3] << std::endl;

    // 查找元素
    auto it = myMap.find(4);
    if (it!= myMap.end()) {
        std::cout << "Found key 4 with value: " << it->second << std::endl;
    }

    // 删除元素
    myMap.erase(5);

    // 遍历map
    std::cout << "Contents of map:" << std::endl;
    for (const auto& pair : myMap) {
        std::cout << pair.first << ": " << pair.second << std::endl;
    }

    // 获取大小
    std::cout << "Size of map: " << myMap.size() << std::endl;

    // 检查是否为空
    std::cout << "Is map empty? " << (myMap.empty()? "Yes" : "No") << std::endl;

    return 0;
}

 

【046】C++中map和multimap容器全面解析:深入学习,轻松掌握 在C++中,map和multimap容器是非常重要的数据结构,它们提供了一种键值对的映射关系,可以高效地组织和访问数据。map容器中的每个元素都包含一个键和一个值,而multimap容器允许键重复。这两种容器在实际项目中广泛应用,特别适合需要快速查找和插入元素的场景。其底层实现采用了红黑树等高效的数据结构,map和multimap容器在处理大量数据时具有良好的性能表现。它们也提供了丰富的操作方法和函数,可以轻松地对容器中的数据进行插入、删除、查找和遍历操作。 阅读详情

相关推荐

手把手教你用ZEMAX复现贝塞尔光束:从Thorlabs锥透镜到Edmund透镜的完整光路搭建

本文详细介绍了如何在ZEMAX光学设计软件中复现贝塞尔光束,从Thorlabs锥透镜到Edmund透镜的完整光路搭建过程。通过逐步指导,帮助研究人员和工程师掌握光学设计技巧,实现无衍射特性的贝塞尔光束生成,适用于激光加工和生物成像等领域。

weixin_33737774的博客 181

c++中map详解

map简介 map是STL的一个关联容器,以键值对存储的数据,其类型可以自己定义,每个关键字在map中只能出现一次,关键字不能修改,值可以修改;map同set、multiset、multimap(与map的差别仅在于multimap允许一个键对应多个值)内部数据结构都是红黑树,而java中的hashmap是以hash table实现的。所以map内部有序(自动排序),查找时间复杂度为O(logn)。 map用法 1、头文件 #include<map> 2、 ...

weixin_41501074的博客 9万+

深入浅出ISP:用RKISP2.x Tuner工具理解AWB、AE、HDR等核心模块的实战调参

本文深入解析RKISP2.x Tuner工具在ISP图像处理中的实战应用,重点探讨AWB、AE、HDR等核心模块的调参技巧。通过环境搭建、调试工具使用和实际案例,帮助开发者掌握如何在不同光照条件下优化图像质量,实现精准的白平衡、曝光控制和动态范围处理。

weixin_26802933的博客 487

C++硬货——map头文件【保姆级教学】

map头文件 接下来我会从(map的构造和赋值)、(map的大小交换)、(map插入和删除)、(map的查找和统计)、(map容器排序)等方面来介绍map容器,每个案例都会有代码和图片说明~

S_JYYDS的博客 7397

ADS AEL脚本进阶:参数化电感与变压器的自动化设计

本文深入探讨了如何利用ADS AEL脚本实现电感与变压器的参数化与自动化设计。通过构建可复用的函数库、封装高级设计流程、集成DRC检查与性能预估,将繁琐的手动绘制升级为高效的智能设计引擎,并最终通过创建GUI工具降低使用门槛,大幅提升射频/微波电路设计效率。

weixin_29309785的博客 203

一文吃透:从零到一开发一套 ABAP RAP 应用的完整路径

ABAP RAP开发实战摘要 本文系统介绍了ABAP RESTful Application Programming Model (RAP)在企业级应用开发中的实施路径。文章以出差申请业务场景为例,详细拆解了RAP开发的六步主线流程: 数据库表设计:规范主键、审计字段设计 CDS数据建模:通过视图定义业务对象实体及关联 行为定义与实现:使用BDEF声明事务规则,Behavior Pool类实现业务逻辑 业务对象投影:裁剪服务接口视图 服务定义与绑定:按OData协议暴露服务 UI集成测试:支持Fiori E

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

C++ MAP详解

map是STL的一个关联容器,以键值对存储的数据,其类型可以自己定义,每个关键字在map中只能出现一次,关键字不能修改,值可以修改;按照value排序时,想直接使用sort函数是做不到的,sort函数只支持数组、vector、list、queue等的排序,无法对map排序,那么就需要把map放在vector中,再对vector进行排序。第二种:用find函数来定位元素出现的位置,它返回一个迭代器,当数据出现时,返回的是数据所在位置的迭代器;my_map.begin() 返回指向map头部的迭代器。

超凡三眼仔的专栏 2371

大学计算 - NumPy库的矩阵运算 实训答案

本文介绍了三个NumPy矩阵操作的实验练习。第一关练习ndarray类型操作,包括矩阵构造、元素平方和计算、矩阵乘积运算和逆矩阵行列式计算;第二关针对matrix类型,涉及绝对值最大值获取、特定矩阵乘积运算和转置矩阵特征值计算;第三关实现Moore-Penrose伪逆矩阵计算,并与NumPy内置pinv函数结果比较误差。实验涵盖了NumPy核心矩阵操作,展示了从基础运算到高级矩阵分解的应用,帮助掌握科学计算中的矩阵处理技巧。

2403_89314916的博客 310

C++之Map

c++中的map库

weixin_61627067的博客 878

ESP32S3接入讯飞在线语音识别教程及配套源代码

本文介绍了如何使用ESP32-S3开发板实现讯飞在线语音识别功能。首先,需要准备硬件设备,包括ESP32-S3开发板、麦克风模块、MicroSD卡模块和扬声器模块。接着,安装Arduino IDE并配置ESP32-S3开发环境,注册讯飞开放平台账号并获取API凭证。然后,通过I2S接口连接麦克风模块,并编写代码实现语音录制、Base64编码、API请求和识别结果处理。代码包括初始化WiFi、麦克风、系统时间,以及录制语音、发送请求、解析响应等功能。最后,通过按键触发录音,并将识别结果输出到串口。

2401_88800025的博客 746

企业如何开展BI建设--指标体系建设

很多企业的数字化转型工作都是从做BI项目开始的,很多企业认为,BI就是做指标大屏,所以做了很多的驾驶舱,也做了很多指标,有从系统取的,有手工填报的,甚至手工填报的比例占到了70%,最终BI沦为了填报系统,业务认为BI就是把从线下的微信沟通转到了线上录入展示,并没有给业务代来任何提升,久而久之,BI大屏就没人关心,公司高层也认为数据都是填报的,都经过了加工处理,这种数据不可信,不能反映业务开展的实际。其实在BI系统建设之前,我们首先要做的就是要梳理企业的指标,到底我们要展示哪些指标?

263

【C++】map和multimap的常用接口详解

insert的返回值也是pair,这里就出现两个pair,一个是前面说过的,pair存的是key/value,insert的返回值的pair存的是一个迭代器和bool值,因为insert可能插入成功,也可能失败。此时 it 就是西瓜的迭代器,it的first是string,就是这个“西瓜”,就是key,it的second是int,就是value。返回值是it的second,it就是苹果的迭代器,苹果的first是string,就是这个“苹果”,就是key,苹果的second是int,就是value。

2402_82757055的博客 1687

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

C++ 哈希表 常用接口总结 力扣 1. 两数之和 每日一题 题解

本文围绕力扣经典入门题“两数之和”,系统讲解哈希表的应用逻辑。先介绍哈希表的本质、核心价值与使用场景,详解C++中unordered_map和unordered_set的常用接口,再针对题目展开算法分析——对比暴力枚举(O(n²)复杂度)与哈希表优化方案(O(n)复杂度),拆解“问题转化(两数和→单目标查找)”“键值设计(数值-下标映射)”“先查后插避重”等关键思路,给出完整代码实现与复杂度分析,点明容器使用误区与面试考点,帮助读者掌握“空间换时间”核心思维,为后续哈希表类题目打下基础。

Q741_147的博客 902

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

【C++】详解map和set基本接口及使用

详解C++ map和set的接口用法,不会就快来和我一起学!

小羊study_sheep的博客 2631

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

【C++】map详解

map的结构和set很类似,部分功能就不演示了,上一篇博客中有Map是 C++ 中非常重要的关联容器之一。它以键值对的形式存储数据,其中每个键都是唯一的,这意味着不能有重复的键。如果尝试插入一个已存在的键,将会覆盖该键对应的值。Map的内部结构是红黑树,这使得它具有很多优点。首先,数据是有序的,这有助于高效地进行查找、插入和删除操作。查找、插入、删除的平均和最坏时间复杂度都是O (log n),其中 n 是 map 中元素的个数。例如,当我们需要存储学生的学号和姓名时,可以使用。

2301_77954967的博客 8564

【C++】unordered_map 容器的最全解析(什么是unordered_map?unordered_map的常用接口有那些?)

【unordered_map】是STL中的容器之一,不同于普通容器,它的查找速度极快,常用来存储各种经常被检索的数据,因为容器的底层是【哈希表】。除此之外,还可以借助其特殊的性质,解决部分难题。

weixin_45031801的博客 2万+

[c++高阶]map和set系列相关接口详解

[c++高阶]二叉搜索树深度剖析-优快云博客[c++高阶]AVL树的深度剖析&模拟实现-优快云博客本章重点:着重讲解map和set的相关接口函数以及使用方法在详细介绍map和set之前,先补充两个概念。区别如下:序列式容器的底层为线性序列的数据结构,里面存储的是元素本身。关联式容器也是用来存储数据的,与序列式容器不同的是,其里面存储的是 ,在数据检索时比序列式容器 效率更高。① 用来表示具有一 一对应关系的一种结构,该结构中一般只包含两个成员变量key和value,key代表键值,value表示与ke

weixin_62196764的博客 1149

【C++】map和set

本篇文章围绕C++中的map和set展开讲解,包含二者用法、红黑树改造、模拟实现map和set等内容

Eristic0618的博客 1772

【C++】16. set和map

本篇文章对stl中的set以及map容器进行了总结,set容器用于key场景下的二叉搜索树,map容器用于key/value场景下的二叉搜索树,以及他们各种接口的使用和练习。

2301_80475881的博客 1320

【C++】map和set的使用

目录1. 序列式容器和关联式容器2. set系列的使用2.1 set和multiset参考文档 - C++ Reference2.2 set类的介绍2.3 set的构造和迭代器2.4 set的增删查2.5 insert和迭代器遍历使用样例:2.6 find和erase使用样例:2.7 multiset和set的差异2.8.lower_bound和upper_bound练习:2.8 349. 两个数组的交集 - 力扣(LeetCode)2.9 142. 环形链表 II - 力扣(LeetCode)3. map

2401_82610555的博客 2293

【C++】set和multiset的常用接口详解

2. set系列的使⽤前⾯我们已经接触过STL中的部分容器如:string、vector、list、deque、array、forward_list等,本篇文章将介绍一下map和multiset的使用。在介绍map之前我们先简单介绍一下什么是序列式容器和关联式容器。前⾯我们已经接触过STL中的部分容器如:string、vector、list、deque、array、forward_list等,这些容器统称为序列式容器,因为逻辑结构为线性序列的数据结构,两个位置存储的。

2402_82757055的博客 1299

C++笔记---set和map

关于set的使用,将其当作key搜索场景的红黑树来使用即可。类型参数分别为:key的类型,比较器(通过仿函数实现,默认为小于比较,中序遍历得到升序序列),内存池。一般来说,后两个参数有缺省值,的使用频率较低,我们在日常使用的过程中只需要传入第一个参数即可。,关于map的使用,将其当作key/value搜索场景的红黑树来使用即可。类型参数分别为:key的类型,value的类型,比较器(通过仿函数实现,默认为小于比较,中序遍历得到升序序列),内存池。

2302_80372340的博客 1222

map详解(C++)

本文章重点讲解了map的成员函数已经模板参数说明,重点介绍了重载运算符operator[]和插入函数

weixin_47271425的博客 8293
上一篇: C++模板进阶
下一篇: C++vector的常用接口及其介绍
Arcane Code
博客等级 码龄3年 598粉丝 101原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值