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


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

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++免费学习笔记(深入)”;

  • 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) 查找,但无序)。


# app  # ai  # c++  # apple  # 键值对  # 标准库  # if  # count  # for  # const  # auto  # bool  # int  # 循环  # operator  # map  # 对象  # 不存在  # 键值  # 升序  # 遍历  # 迭代  # 默认值  # 的是  # 红黑  # 已有  # 只需 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 网络优化76771 】 【 技术知识130152 】 【 IDC云计算60162 】 【 营销推广131313 】 【 AI优化88182 】 【 百度推广37138 】 【 网站推荐60173 】 【 精选阅读31334


相关推荐: Windows10系统怎么查看硬盘健康_Win10 SMART信息检测工具  如何使用Golang log记录不同级别日志_Golang log Println与Fatal示例  如何使用Golang实现文件加密_Golang crypto 文件加密示例  php8.4如何实现队列任务_php8.4redis队列简单实现方法【教程】  Win11怎么设置开机自动连接宽带_Windows11创建拨号连接计划任务  如何使用Golang反射创建map对象_动态生成键值映射  Windows10蓝屏代码DPC_WATCHDOG_VIOLATION_Win10死机修复指南  全球各国上班时间表外贸邮件时间  Python多进程教程_multiprocessing模块实战  Win10怎么卸载金山毒霸_Win10彻底卸载金山毒霸方法【步骤】  如何解决同一段404代码在不同主机上表现不一致的问题  如何在Golang中理解指针比较_Golang地址比较与相等判断  Golang如何避免指针逃逸_Golang逃逸分析与堆栈优化策略  c++协程和线程的区别 c++异步编程模型对比【核心】  如何使用Golang实现基本类型比较_Golang比较操作符使用方法  如何测试您的网站全球打开速度-网站海外测速工  Python网络日志追踪_请求定位解析【教程】  php条件判断怎么写_ifelse和switchcase的使用区别【对比】  Windows 10怎么把任务栏放在屏幕上方_Windows 10解锁任务栏并拖动位置  Win11怎么关闭系统声音_Win11系统提示音静音设置【详解】  c++如何实现一个高性能的环形队列(Ring Buffer)_c++无锁实现方法【并发】  Win11怎么压缩文件 Win11自带压缩解压功能使用【教程】  php中常量能用::访问吗_类常量与作用域操作符使用场景【汇总】  Django 密码修改后会话失效的解决方案  Mac如何使用听写功能_Mac语音输入打字【效率技巧】  如何在Golang中使用replace替换模块_指定本地或远程路径  php会话怎么开启_session_start函数的作用与使用时机【方法】  Win11怎么设置指纹解锁 Win11笔记本录入指纹登录【教程】  php怎么连接数据库_MySQL数据库连接的基础代码编写【说明】  Win11怎么开启专注模式_Windows11时钟应用Focus Session  Win11怎么开启窗口对齐助手_Windows11系统多任务处理设置  Win10如何卸载Skype_Win10卸载Skype步骤【步骤】  Python正则表达式实战_模式匹配说明【教程】  如何使用Golang管理模块版本_Golanggo mod tidy与升级方法  如何使用Golang实现聊天室消息存档_存储聊天记录到文件  PHP怎么接收前端传的时间戳_处理时间戳参数转换技巧汇总【指南】  如何理解Go指针和内存分配关系_Go Pointer内存Model解析  新手学PHP架构总混淆概念咋办_重点梳理【教程】  Win11怎么更改电脑密码_Windows 11修改本地账户密码【步骤】  Python文件和流处理指南_高效读写大体积数据文件  c++怎么使用类型萃取type_traits_c++ 模板元编程类型判断【方法】  Python对象比较排序规则_集合使用说明【指导】  Windows Defender扫描失败怎么办_安全模块损坏修复方式  Win10如何更改电脑休眠时间_Windows10电源和睡眠选项调整  Win10文件历史记录怎么用 Win10开启自动备份文件教程【防丢】  跨文件调用类方法怎么用_php作用域操作符与自动加载配合【介绍】  Linux怎么实现内网穿透_Linux安装Frp客户端与服务端配置【方法】  C++如何将C风格字符串(char*)转换为std::string?(代码示例)  win11如何清理传递优化文件 Win11为C盘瘦身删除更新缓存【技巧】  Python对象比较与排序_魔术方法解析【教程】 

 2025-12-30

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

致胜网络推广营销网


致胜网络推广营销网

致胜网络推广营销网专注海外推广十年,是谷歌推广.Facebook广告全球合作伙伴,我们精英化的技术团队为企业提供谷歌海外推广+外贸网站建设+网站维护运营+Google SEO优化+社交营销为您提供一站式海外营销服务。

 915688610

 17370845950

 915688610@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.