0

0

c++ map容器如何使用 键值对的插入、查找和删除【教程】

穿越時空

穿越時空

发布时间:2025-12-30 16:18:08

|

912人浏览过

|

来源于php中文网

原创

map 是基于红黑树的有序关联容器,键唯一且自动升序;支持 operator[]、insert()、emplace() 插入;查找推荐用 find(),避免 operator[] 意外插入;删除用 erase();遍历用范围 for 循环。

c++ map容器如何使用 键值对的插入、查找和删除【教程】

map 是 C++ 标准库中常用的关联容器,底层通常基于红黑树实现,自动按键(key)升序排序,支持高效查找、插入和删除,时间复杂度均为 O(log n)。它存储的是键值对(key-value pairs),且每个键唯一。

插入键值对

有多种方式向 map 插入元素,常用方法包括:

  • operator[]:用键作为下标赋值,若键不存在则自动构造默认值并插入;若已存在,则覆盖对应 value。
    例如:myMap["apple"] = 5; —— 若 "apple" 不存在,插入 {"apple", 5};若已存在,则将 value 改为 5。
  • insert():更安全的插入方式,不会覆盖已有键,返回一个 pair,second 表示是否插入成功。
    例如:auto ret = myMap.insert({"banana", 3});ret.second 为 true 表示新插入,false 表示键已存在。
  • emplace():就地构造键值对,避免临时对象拷贝,效率略高(尤其对大对象)。
    例如:myMap.emplace("cherry", 7);

查找键对应的值

查找操作不改变容器,主要有以下几种方式:

  • operator[]:最简写法,但注意——若键不存在,会自动插入该键并赋予 value 默认值(如 int 为 0),这可能不是你想要的行为。
  • at():带边界检查,若键不存在抛出 std::out_of_range 异常,适合需要严格校验的场景。
    例如:int count = myMap.at("apple");
  • find():推荐方式。返回迭代器,若找到则指向对应键值对,否则等于 end()
    例如:auto it = myMap.find("apple"); if (it != myMap.end()) { cout second; }

删除指定键或范围

删除操作通过 erase() 完成,有三种重载形式:

立即学习C++免费学习笔记(深入)”;

Bika.ai
Bika.ai

打造您的AI智能体员工团队

下载
  • erase(key):直接传入键,删除该键对应元素,返回删除的元素个数(0 或 1)。
  • erase(iterator):删除指定迭代器位置的元素,返回下一个有效迭代器(可用于循环中安全删除)。
  • erase(first, last):删除 [first, last) 范围内的所有元素(较少用于 map,因 key 有序,多用于子范围清理)。

遍历与注意事项

map 支持基于范围的 for 循环:

for (const auto& kv : myMap) { cout

注意点:

  • 键类型必须支持 比较(默认用 std::less),自定义类需重载 operator 或提供比较函数。
  • map 中的 key 不可修改(因为会影响排序结构),如需修改,应先 erase 再 insert。
  • 若只需哈希查找且不关心顺序,可考虑 unordered_map(平均 O(1) 查找,但无序)。

相关专题

更多
if什么意思
if什么意思

if的意思是“如果”的条件。它是一个用于引导条件语句的关键词,用于根据特定条件的真假情况来执行不同的代码块。本专题提供if什么意思的相关文章,供大家免费阅读。

710

2023.08.22

counta和count的区别
counta和count的区别

Count函数用于计算指定范围内数字的个数,而CountA函数用于计算指定范围内非空单元格的个数。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

192

2023.11.20

c语言const用法
c语言const用法

const是关键字,可以用于声明常量、函数参数中的const修饰符、const修饰函数返回值、const修饰指针。详细介绍:1、声明常量,const关键字可用于声明常量,常量的值在程序运行期间不可修改,常量可以是基本数据类型,如整数、浮点数、字符等,也可是自定义的数据类型;2、函数参数中的const修饰符,const关键字可用于函数的参数中,表示该参数在函数内部不可修改等等。

518

2023.09.20

string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

312

2023.08.02

int占多少字节
int占多少字节

int占4个字节,意味着一个int变量可以存储范围在-2,147,483,648到2,147,483,647之间的整数值,在某些情况下也可能是2个字节或8个字节,int是一种常用的数据类型,用于表示整数,需要根据具体情况选择合适的数据类型,以确保程序的正确性和性能。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

520

2024.08.29

c++怎么把double转成int
c++怎么把double转成int

本专题整合了 c++ double相关教程,阅读专题下面的文章了解更多详细内容。

48

2025.08.29

C++中int的含义
C++中int的含义

本专题整合了C++中int相关内容,阅读专题下面的文章了解更多详细内容。

188

2025.08.29

golang map内存释放
golang map内存释放

本专题整合了golang map内存相关教程,阅读专题下面的文章了解更多相关内容。

73

2025.09.05

桌面文件位置介绍
桌面文件位置介绍

本专题整合了桌面文件相关教程,阅读专题下面的文章了解更多内容。

0

2025.12.30

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Java 教程
Java 教程

共578课时 | 39.3万人学习

国外Web开发全栈课程全集
国外Web开发全栈课程全集

共12课时 | 0.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号