0

0

C++如何使用map?(插入、查找与删除示例)

裘德小鎮的故事

裘德小鎮的故事

发布时间:2025-12-30 09:37:36

|

120人浏览过

|

来源于php中文网

原创

map 是 C++ 标准库中基于红黑树实现的关联容器,自动按 key 有序排列,支持快速查找、插入和删除(平均时间复杂度 O(log n)),要求 key 可比较(默认使用 less 比较)。

c++如何使用map?(插入、查找与删除示例)

map 是 C++ 标准库中基于红黑树实现的关联容器,自动按 key 有序排列,支持快速查找、插入和删除(平均时间复杂度 O(log n))。它要求 key 可比较(默认使用

插入元素:operator[] 和 insert

常用两种方式插入键值对

  • operator[]:若 key 不存在则默认构造 value 并插入;若已存在则覆盖 value。适合“写多读少”或需要默认初始化的场景。
  • insert():只在 key 不存在时插入,返回 pair,second 表示是否成功插入。更安全,避免意外覆盖。

示例:

#include 
#include 
using namespace std;

int main() {
    map m;

    // 方式1:operator[]
    m["apple"] = 10;     // 插入或更新
    m["banana"] = 20;

    // 方式2:insert()
    auto ret1 = m.insert({"cherry", 30});      // 成功,ret1.second 为 true
    auto ret2 = m.insert({"apple", 99});       // 失败(key 已存在),ret2.second 为 false

    cout << m["apple"] << endl;  // 输出 10(未被 insert 覆盖)
}

查找元素:find() 和 operator[] 的区别

查找推荐用 find(),因为它不修改 map,且能区分“key 不存在”和“key 存在但 value 为默认值”:

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

Winston AI
Winston AI

强大的AI内容检测解决方案

下载
  • find(key) 返回 iterator,等于 end() 表示未找到;安全、高效、语义清晰。
  • operator[](key) 在 key 不存在时会**插入**一个默认构造的 value,改变容器状态,不适合只读查找。

示例:

auto it = m.find("grape");
if (it != m.end()) {
    cout << "Found: " << it->first << " = " << it->second << endl;
} else {
    cout << "Not found" << endl;
}

删除元素:erase()

erase() 支持三种调用形式:

  • erase(iterator):删除单个元素(推荐,O(1) 平摊)
  • erase(key):删除指定 key 的元素(返回删除个数,map 中总是 0 或 1)
  • erase(first, last):删除 [first, last) 区间内所有元素

注意:用 iterator 删除后,该 iterator 失效,不要继续使用;但 erase 返回下一个有效 iterator(C++11 起),可用于遍历时安全删除:

// 安全遍历删除满足条件的元素
for (auto it = m.begin(); it != m.end(); ) {
    if (it->second < 15) {
        it = m.erase(it);  // erase 返回下一个 iterator
    } else {
        ++it;
    }
}

其他实用细节

  • map 默认升序排列(用 less),可传自定义比较器,如 map> 实现降序。
  • size() 返回元素个数,empty() 判断是否为空,clear() 清空全部元素。
  • key_type、mapped_type、value_type 是常用类型别名,增强泛型代码可读性

相关专题

更多
Sass和less的区别
Sass和less的区别

Sass和less的区别有语法差异、变量和混合器的定义方式、导入方式、运算符的支持、扩展性等。本专题为大家提供Sass和less相关的文章、下载、课程内容,供大家免费下载体验。

197

2023.10.12

string转int
string转int

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

311

2023.08.02

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1434

2023.10.24

Go语言中的运算符有哪些
Go语言中的运算符有哪些

Go语言中的运算符有:1、加法运算符;2、减法运算符;3、乘法运算符;4、除法运算符;5、取余运算符;6、比较运算符;7、位运算符;8、按位与运算符;9、按位或运算符;10、按位异或运算符等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

222

2024.02.23

php三元运算符用法
php三元运算符用法

本专题整合了php三元运算符相关教程,阅读专题下面的文章了解更多详细内容。

84

2025.10.17

string转int
string转int

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

311

2023.08.02

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

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

518

2024.08.29

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

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

48

2025.08.29

俄罗斯搜索引擎Yandex最新官方入口网址
俄罗斯搜索引擎Yandex最新官方入口网址

Yandex官方入口网址是https://yandex.com;用户可通过网页端直连或移动端浏览器直接访问,无需登录即可使用搜索、图片、新闻、地图等全部基础功能,并支持多语种检索与静态资源精准筛选。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

1

2025.12.29

热门下载

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

精品课程

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

共578课时 | 39.2万人学习

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

共12课时 | 0.9万人学习

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

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