C++中的map容器详解

C++中的map容器是一种关联式容器,提供了键-值对(key-value pair)的存储和快速查找功能。map容器由标准模板库(STL)提供,包含在<map>头文件中。map使用平衡二叉树(通常是红黑树)实现,因此能够在对数时间复杂度内完成插入、删除和查找操作。

基本特点

  • 键值唯一性:每个键(key)在map中是唯一的,不能重复。
  • 自动排序map根据键的大小自动排序,默认使用小于运算符(<)比较键的大小,可以通过指定自定义比较器改变排序规则。
  • 键和值的类型:键和值可以是任何可比较和可复制的类型。
  • 双向迭代器map提供双向迭代器,可以从头到尾或从尾到头遍历元素。

常用操作

创建和初始化
#include <iostream>
#include <map>
#include <string>int main() {// 创建一个空的 mapstd::map<int, std::string> myMap;// 使用初始化列表初始化 mapstd::map<int, std::string> initMap = {{1, "One"},{2, "Two"},{3, "Three"}};return 0;
}

插入元素

int main() {std::map<int, std::string> myMap;// 使用 insert() 方法插入元素myMap.insert(std::make_pair(1, "One"));myMap.insert(std::pair<int, std::string>(2, "Two"));// 使用下标操作符插入元素myMap[3] = "Three";// 插入重复键的元素(不会插入)auto result = myMap.insert(std::make_pair(1, "One Again"));if (!result.second) {std::cout << "Key 1 already exists with value: " << result.first->second << std::endl;}return 0;
}

访问元素

int main() {std::map<int, std::string> myMap = {{1, "One"},{2, "Two"},{3, "Three"}};// 使用下标操作符访问元素std::cout << "Key 1 has value: " << myMap[1] << std::endl;// 使用 at() 方法访问元素try {std::cout << "Key 2 has value: " << myMap.at(2) << std::endl;} catch (const std::out_of_range& e) {std::cout << e.what() << std::endl;}// 使用 find() 方法查找元素auto it = myMap.find(3);if (it != myMap.end()) {std::cout << "Key 3 has value: " << it->second << std::endl;}return 0;
}

删除元素

int main() {std::map<int, std::string> myMap = {{1, "One"},{2, "Two"},{3, "Three"}};// 使用 erase() 方法删除指定键的元素myMap.erase(2);// 使用迭代器删除元素auto it = myMap.find(3);if (it != myMap.end()) {myMap.erase(it);}return 0;
}

遍历元素

int main() {std::map<int, std::string> myMap = {{1, "One"},{2, "Two"},{3, "Three"}};// 使用范围for循环遍历元素for (const auto& pair : myMap) {std::cout << "Key: " << pair.first << ", Value: " << pair.second << std::endl;}// 使用迭代器遍历元素for (auto it = myMap.begin(); it != myMap.end(); ++it) {std::cout << "Key: " << it->first << ", Value: " << it->second << std::endl;}return 0;
}

常用成员函数

  • 构造函数

    • 默认构造函数:map()
    • 拷贝构造函数:map(const map& other)
    • 移动构造函数:map(map&& other)
  • 元素访问

    • at(const key_type& k): 返回键为k的元素的引用,如果键不存在则抛出异常。
    • operator[](const key_type& k): 返回键为k的元素的引用,如果键不存在则插入一个默认值。
  • 迭代器

    • begin(), end(): 返回指向容器首尾的迭代器。
    • rbegin(), rend(): 返回指向容器逆向首尾的迭代器。
  • 容量

    • empty(): 检查容器是否为空。
    • size(): 返回容器中元素的数量。
    • max_size(): 返回容器最大可能包含的元素数量。
  • 修改

    • insert(): 插入元素。
    • erase(): 删除指定键或迭代器位置的元素。
    • clear(): 清空容器。
  • 查找

    • find(const key_type& k): 查找键为k的元素,返回指向该元素的迭代器,如果不存在则返回end()
    • count(const key_type& k): 返回键为k的元素个数(对于map而言,要么是0要么是1)。
  • 比较

    • key_comp(), value_comp(): 返回用于比较键和值的比较器对象。

通过了解和掌握这些基本操作和成员函数,可以高效地使用map容器来管理和操作键值对数据。

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

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

相关文章

软考 系统架构设计师系列知识点之杂项集萃(31)

接前一篇文章&#xff1a;软考 系统架构设计师系列知识点之杂项集萃&#xff08;30&#xff09; 第49题 软件开发环境是支持软件产品开发的软件系统&#xff0c;它由软件工具集和环境集成机制构成。环境集成机制包括&#xff1a;提供统一的数据模式和数据接口规范的数据集成机…

VB.net调用VC DLL

函数的修饰名&#xff1f;参考文献12 .DEF导出和__declspec(dllexport)的优缺点&#xff1f;参考文献11 1、__declspec(dllexport) 可以使用 __declspec(dllexport) 关键字从 DLL 中导出数据、函数、类或类成员函数。 尝试导出已修饰的 C 函数名称时&#xff0c;这种便利性…

什么是幂等问题?

什么是幂等问题&#xff1f; 先说下什么是幂等&#xff0c;幂等性是数学和计算机科学中的概念&#xff0c;用于描述操作无论执行多少次&#xff0c;都产生相同结果的特性。在软件行业中&#xff0c;广泛应用该概念。当我们说一个接口支持幂等性时&#xff0c;无论调用多少次&a…

nginx优化与防盗链【☆☆☆】

目录 一、用户层面的优化 1、隐藏版本号 方法一&#xff1a;修改配置文件 方法二&#xff1a;修改源码文件&#xff0c;重新编译安装 2、修改nginx用户与组 3、配置nginx网页缓存时间 4、nginx的日志切割 5、配置nginx实现连接超时 6、更改nginx运行进程数 7、开启网…

1 c++多线程创建和传参

什么是进程&#xff1f; 系统资源分配的最小单位。 什么是线程&#xff1f; 操作系统调度的最小单位&#xff0c;即程序执行的最小单位。 为什么需要多线程&#xff1f; &#xff08;1&#xff09;加快程序执行速度和响应速度, 使得程序充分利用CPU资源。 &#xff08;2&…

Python 全栈体系【四阶】(五十八)

第五章 深度学习 十三、自然语言处理&#xff08;NLP&#xff09; 3. 文本表示 3.1 One-hot One-hot&#xff08;独热&#xff09;编码是一种最简单的文本表示方式。如果有一个大小为V的词表&#xff0c;对于第i个词 w i w_i wi​&#xff0c;可以用一个长度为V的向量来表示…

【设计模式】行为型设计模式之 模板方法模式

介绍 GOF 定义 模板方法模式 Template Method Design Pattern &#xff1a;模板方法模式在一个方法中定义一个算法骨架&#xff0c;并将某些步骤推迟到子类中去实现&#xff1b;模板方法在不改变算法整体结构的情况下&#xff0c;可以重新定义算法中的某些步骤。 代码举例 …

npm install 的原理

1. 执行命令发生了什么 &#xff1f; 执行命令后&#xff0c;会将安装相关的依赖&#xff0c;依赖会存放在根目录的node_modules下&#xff0c;默认采用扁平化的方式安装&#xff0c;排序规则为&#xff1a;bin文件夹为第一个&#xff0c;然后是开头系列的文件夹&#xff0c;后…

Linux网络诊断工具mtr命令详解

目录 一、mtr概述 二、mtr的特点 1、动态路由显示 2、数据包类型 3、显示延迟和丢包 4、过滤和日志 5、网络探测 三、基本用法 1、基本语法 2、帮助 3、常用选项 四、输出解释 1、常见mtr命令及其输出 2、输出解释 四、命令实例 1. 最基本的用法 2. 显示报告形式…

SpringBoot 配置事务

SpringBoot 在启动时已经加载了事务管理器&#xff0c;所以只需要在需要添加事务的方法/类上添加Transactional即可生效&#xff0c;无需额外配置。 TransactionAutoConfiguration 事务的自动配置类解析&#xff1a; SpringBoot 启动时加载/META-INF/spring/org.springframewor…

⑤单细胞学习-cellchat组间通讯差异分析

④-1单细胞学习-cellchat单数据代码补充版-CSDN博客 ④-2单细胞学习-cellchat单数据代码补充版&#xff08;通讯网络&#xff09;-CSDN博客 参考&#xff1a; 1&#xff1a;单细胞分析之细胞交互-3&#xff1a;CellChat - 简书 (jianshu.com) 2&#xff1a;CellChat细胞通讯…

帕友的小贴士,锻炼

帕金森病作为一种慢性神经系统疾病&#xff0c;对患者的生活质量产生了深远的影响。虽然医学界对于帕金森病的治疗仍在不断探索&#xff0c;但合理的锻炼已经被证实是改善患者症状、提高生活质量的有效途径之一。本文旨在为帕金森病患者推荐一些适合的锻炼方法&#xff0c;帮助…

c#未能加载基类System错误 这台计算机上缺少此项目引用的 NuGet 程序包

拷贝代码到另一台计算机运行&#xff0c;打开Form1.cs报错 首先确认package的框架 如果是472&#xff0c;则更换472的框架 打开项目->xx属性&#xff0c;进行修改 如果框架正确&#xff0c;就是未识别到程序包 可以参考&#xff1a; https://www.cnblogs.com/txwtech/p/1…

WPF真入门教程32--WPF数字大屏项目实干

1、项目背景 WPF (Windows Presentation Foundation) 是微软的一个框架&#xff0c;用于构建桌面客户端应用程序&#xff0c;它支持富互联网应用程序&#xff08;RIA&#xff09;的开发。在数字大屏应用中&#xff0c;WPF可以用来构建复杂的用户界面&#xff0c;展示庞大的数据…

day31贪心算法part01| 理论基础 455.分发饼干 376. 摆动序列 53. 最大子序和

**455.分发饼干 ** 视频讲解 | 力扣链接刚开始想到的&#xff0c;但是这样太暴力了&#xff0c;太笨了 class Solution { public:int findContentChildren(vector<int>& g, vector<int>& s) {// 胃口g 饼干尺寸sint result 0;sort(s.begin(), s.end());…

后方碰撞预警系统技术规范(简化版)

后方碰撞预警系统技术规范(简化版) 1 系统概述2 预警区域3 预警目标4 功能需求功能条件5 显示需求6 指标需求1 系统概述 后方碰撞预警系统RCW(Rear Collision Warning)是在后方车辆即将与自车发生碰撞之前,激活危险警告灯以较高频率闪烁,从而吸引后方驾驶员的注意力,避免…

mysql 数据库datetime 类型,转换为DO里面的long类型后,只剩下年了,没有了月和日

解决方法也简单&#xff1a; 自定义个一个 Date2LongTypeHandler <resultMap id"BeanResult" type"XXXX.XXXXDO"><result column"gmt_create" property"gmtCreate" jdbcType"DATE" javaType"java.lang.Long&…

44【Aseprite 作图】樱花丸子——拆解

1 枝干 2 花朵&#xff1a;其实只要形状差不多都行&#xff0c;有三个颜色&#xff0c;中间花蕊颜色深一点&#xff0c;中间花蕊外的颜色偏白&#xff1b;不透明度也可以改一下&#xff0c;就变成不同颜色 3 丸子 最外层的颜色最深&#xff0c;中间稍浅&#xff0c;加一些高光…

ISO 19115-2:2019 附录 A(规范性附录)一致性

A.1 概述 本文件中的抽象测试套件包括 ISO 19115-1:2014 中通过引用定义的抽象测试套件。符合本文件的元数据应满足 ISO 19115-1:2014 的一致性要求,并应按本文件第 6 章和附录 B 规定提供。用户定义的元数据应按 ISO 19115-1:2014 附录 C 的规定定义和提供。用户定义的元数据…

2024全国大学生数学建模竞赛优秀参考资料分享

0、竞赛资料 优秀的资料必不可少&#xff0c;优秀论文是学习的关键&#xff0c;视频学习也非常重要&#xff0c;如有需要请点击下方名片获取。 一、赛事介绍 全国大学生数学建模竞赛(以下简称竞赛)是中国工业与应用数学学会主办的面向全国大学生的群众性科技活动&#xff0c;旨…