C++学习第二十二课:STL映射类的深入解析

在这里插入图片描述

C++学习第二十二课:STL映射类的深入解析

在C++标准模板库(STL)中,映射类(std::mapstd::multimap)是用来存储关联数据的容器。与集合类不同,映射类中的每个元素都是一个键值对(key-value pair),其中键用于保持元素的唯一性和排序。本课将详细介绍STL映射类的使用,并通过示例代码展示其功能。

1. 映射类概述

映射类容器存储键值对,允许通过键快速查找、插入和删除元素。

示例代码
#include <map>std::map<int, std::string> capitalCities;
capitalCities[1] = "Beijing";
capitalCities[2] = "New Delhi";

2. 初始化映射

映射可以初始化为一个空容器,或者使用键值对列表进行初始化。

示例代码
std::map<int, std::string> capitals = {{1, "Beijing"}, {2, "New Delhi"}};

3. 访问和修改元素

通过键访问和修改映射中的元素。

示例代码
std::string& capital = capitals[1]; // 获取键为1的元素的引用
capital += " (China)";

4. 添加元素

使用下标操作符[]insert函数向映射中添加元素。

示例代码
capitalCities.insert({3, "Tokyo"});

5. 移除元素

使用erase函数从映射中移除元素。

示例代码
auto it = capitalCities.find(2);
if (it != capitalCities.end()) {capitalCities.erase(it); // 移除键为2的元素
}

6. 映射迭代器

使用迭代器遍历映射中的所有元素。

示例代码
for (const auto& pair : capitalCities) {std::cout << pair.first << ": " << pair.second << std::endl;
}

7. 映射的键值查找

使用find函数查找特定键的元素。

示例代码
auto it = capitalCities.find(3);
if (it != capitalCities.end()) {std::cout << "Found: " << it->second << std::endl;
}

8. 映射的大小和容量

使用sizemax_size函数获取映射的大小和最大容量。

示例代码
std::size_t size = capitalCities.size();

9. std::multimap

std::multimap允许键的重复,存储多个具有相同键的元素。

示例代码
#include <multimap>std::multimap<std::string, int> scores;
scores.insert({"Alice", 90});
scores.insert({"Alice", 95});

10. 映射的排序

映射类容器中的元素按照键的顺序自动排序。

示例代码
std::map<char, int> freq;
// ... 填充freq ...
for (const auto& pair : freq) {std::cout << pair.first << " appears " << pair.second << " times" << std::endl;
}

结语

通过本课的学习,你深入了解了STL中的映射类容器,包括std::mapstd::multimap,以及它们的初始化、元素访问、添加和移除元素、迭代器使用、内存管理、异常安全性、实际应用、线程安全性和性能考量。

映射类容器是C++中处理键值对数据的强大工具,它们在需要快速查找和存储关联数据的场景下非常有用。掌握映射类容器的使用对于编写高效、安全、可维护的C++程序至关重要。

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

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

相关文章

关于继承~

继承 动物有猫、狗&#xff0c; 猫又分为加菲猫、布偶猫......&#xff1b;狗又有哈士奇、德国牧羊犬...... 我们发现&#xff0c;下一类除了拥有上一类的共性之外&#xff0c;还拥有自己的特性。 于是我们可以利用继承的方式来减少重复的代码 继承的基本语法 class A:p…

buuctf re findKey

参考&#xff1a;http://t.csdnimg.cn/hUKRJ 参考&#xff1a;http://t.csdnimg.cn/kIk4i 32位&#xff0c;ida打开 f5&#xff0c;先不管呢 winmain函数 看看字符串 进到flag那里&#xff0c;没法反编译 寻找 看汇编&#xff0c;发现两个一样的push&#xff08;不理解怎…

【力扣】203、环形链表 II

142. 环形链表 II 要解决这道题&#xff0c;首先需要对问题进行拆解&#xff1a; 确定链表是否存在环确定环的入口点 如何判断是否存在环呢&#xff1f;这个比较容易想到&#xff0c;使用快慢指针即可判断链表是否存在环。我们定义两个指针&#xff1a; ListNode slow head…

CUDA和显卡驱动

1.安装显卡驱动 https://www.nvidia.com/download/index.aspx?langen-us 由于我的显卡是RTX4060&#xff0c;因此先选择RTX40系列&#xff0c;然后选择RTX4060&#xff0c;进行安装 2.查看显卡对应的CUDA CUDA安装地址&#xff1a;https://developer.nvidia.com/cuda-toolk…

buuctf-misc-27.面具下的flag

27.面具下的flag 题目&#xff1a;binwalk分离后&#xff0c;解压vmdk文件,对其中的字符进行翻译 将其放到kali中进行binwalk,可以看到有有隐藏的压缩包文件&#xff0c;我们提取一下 文件放到了主目录下&#xff0c;我们使用对应命令发现有zip文件&#xff0c;然后再使用对应…

前端工程化04-VsCode插件设置总结(持续更)

1、输出语句log设置 log输出、平常你输出log,还必须得打一个console然后再.log()非常不方便&#xff0c;当然我们可以直接输入一个log,但是提示有两个&#xff0c;我们还得上下选择 所以我们直接采用插件的提示 一个clg就可以了 2、括号包裹提示 找到VsCode的settings.js文…

【JavaEE】多线程安全问题

文章目录 1、什么是多线程安全问题2、出现线程不安全的原因2.1 线程在系统中是随机调度&#xff0c;抢占式执行的2.2 多个线程同时修改同一个变量2.3 线程针对变量的修改操作&#xff0c;不是“原子”的2.4 内存可见性问题2.5 指令重排序 3 、如何解决线程安全问题3.1 锁操作3.…

《十三》QT绘图原理双缓冲机制

一、原理与设计 所谓双缓冲机制&#xff0c;是指在绘制控件时&#xff0c;首先将要绘制的内容绘制在一个图片中&#xff0c;再将图片一次性地绘制到控件上。在早期的 Qt 版本中&#xff0c;若直接在控件上进行绘制工作&#xff0c;则在控件重绘时会产生闪烁地现象&#xff0c;控…

C语言之数据结构之栈和队列的运用

目录 1. 用队列实现栈1.1 思路讲解1.2 代码实现 2. 用栈实现队列1.1 思路讲解1.2 代码实现 总结 •͈ᴗ•͈ 个人主页&#xff1a;御翮 •͈ᴗ•͈ 个人专栏&#xff1a;C语言数据结构 •͈ᴗ•͈ 欢迎大家关注和订阅!!! 1. 用队列实现栈 题目描述&#xff1a; 请你仅使用两个…

练习题(2024/5/3)

1对称二叉树 给你一个二叉树的根节点 root &#xff0c; 检查它是否轴对称。 示例 1&#xff1a; 输入&#xff1a;root [1,2,2,3,4,4,3] 输出&#xff1a;true示例 2&#xff1a; 输入&#xff1a;root [1,2,2,null,3,null,3] 输出&#xff1a;false提示&#xff1a; 树中…

鸿蒙通用组件Image简介

鸿蒙通用组件Image简介 图片----Image图片支持三种引用方式设置图片宽高设置图片缩放模式设置图片占位图设置图片重复样式设置图片插值效果 图片----Image Image主要用于在应用中展示图片 Image($r(app.media.app_icon)).width(150) // 设置宽.height(150) // 设置高.objectF…

一文看懂卷积神经网络CNN(1)—前馈神经网络

目录 参考资料 一、神经网络 1、人脑神经网络 2、人工神经网络 3、神经网络的发展历史 二、前馈神经网络 1、神经元 &#xff08;1&#xff09;Sigmoid型函数 ① Logistic函数 ②Tanh函数 ③两个函数形状对比 &#xff08;2&#xff09;ReLU函数 ① 带泄露的ReLU函…

leetcode刷题(3): 动态规划

文章目录 42. 接雨水解题思路c 实现 64. 最小路径和解题思路c 实现 62 不同路径解题思路c 实现 42. 接雨水 题目&#xff1a; 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图&#xff0c;计算按此排列的柱子&#xff0c;下雨之后能接多少雨水。 示例: 解题思路 使用动态…

大功率双向直流电源的输出电压和电流

双向直流电源&#xff08;Bidirectional DC Power Supply&#xff09;是一种具有双向输出电能的直流电源。与传统的直流电源相比&#xff0c;双向直流电源在输出电能的同时&#xff0c;还具备一定的电流输入能力&#xff0c;从而使其应用范围更加广泛。大功率双向直流电源作为电…

言语 目录

List item List item List item

【业务场景】京东实际场景,频繁GC引起的CPU飙高问题的解决

目录 1.业务介绍 2.判断任务类型 3.CPU飙高的原因 1.业务介绍 本文的业务场景是京东零售线公开的一篇文章&#xff0c;文章内容详细介绍了京东零售线如何将广告相关的定时任务从半小时优化到秒级的&#xff0c;原文链接&#xff1a; 半小时到秒级&#xff0c;京东零售定时…

USP技术提升大语言模型的零样本学习能力

大语言模型&#xff08;LLMs&#xff09;在零样本和少样本学习能力上取得了显著进展&#xff0c;这通常通过上下文学习&#xff08;in-context learning, ICL&#xff09;和提示&#xff08;prompting&#xff09;来实现。然而&#xff0c;零样本性能通常较弱&#xff0c;因为缺…

数据库(MySQL)—— 事务

数据库&#xff08;MySQL&#xff09;—— 事务 什么是事务事务操作未控制事务测试异常情况 控制事务一查看/设置事务提交方式&#xff1a;提交事务回滚事务 控制事务二开启事务提交事务回滚事务 并发事务问题脏读&#xff08;Dirty Read&#xff09;不可重复读&#xff08;Non…

【热门话题】如何构建具有高度扩展性的系统

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 如何构建具有高度扩展性的系统引言一、理解扩展性1.1 扩展性的定义1.2 扩展性的…

嵌入式单片机中必会的50个电路分享

单片机 电源 声音模块 收音机 485