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

大芳酱_3404

大芳酱_3404

2025-12-30

160人浏览

原创

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 表示是否成功插入。更安全,避免意外覆盖。

示例:

Livestream Script Generator
Livestream Script Generator

直播带货脚本:话术、节奏、互动、促单。适用于主播、电商运营、MCN机构。

下载
#include <map>
#include <iostream>
using namespace std;

int main() {
    map<string int> 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 <h3>查找元素:find() 和 operator[] 的区别</h3>
<p>查找推荐用 <font color="blue">find()</font>,因为它不修改 map,且能区分“key 不存在”和“key 存在但 value 为默认值”:</p>
<ul>
<li>
<font color="blue">find(key)</font> 返回 iterator,等于 end() 表示未找到;安全、高效、语义清晰。</li>
  <li>
<font color="blue">operator[](key)</font> 在 key 不存在时会**插入**一个默认构造的 value,改变容器状态,不适合只读查找。</li>
</ul>
<p>示例:</p>
<pre class="brush:php;toolbar:false;">auto it = m.find("grape");
if (it != m.end()) {
    cout first second <h3>删除元素:erase()</h3><p><font color="blue">erase()</font> 支持三种调用形式:</p>
  • 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 <h3>其他实用细节</h3>
  • map 默认升序排列(用 less),可传自定义比较器,如 map> 实现降序。
  • size() 返回元素个数,empty() 判断是否为空,clear() 清空全部元素。
  • key_type、mapped_type、value_type 是常用类型别名,增强泛型代码可读性。

C++免费学习笔记(深入):立即使用
在学习笔记中,你将探索 C++ 的入门与实战技巧!

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

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

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

2023.10.12

3347

5

string转int
string转int

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

2023.08.02

7579

3

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

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

2023.10.24

6404

49

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

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

2024.02.23

3564

5

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

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

2025.10.17

1952

13

string转int
string转int

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

2023.08.02

7579

3

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

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

2024.08.29

3585

6

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

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

2025.08.29

4748

10

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

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

2025.08.29

3165

10

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
uni-app从入门到实战教程
uni-app从入门到实战教程

共0课时 | 0人学习

uni-app x harmony开发指南
uni-app x harmony开发指南

共0课时 | 0人学习

uni-app鸿蒙运行和发行
uni-app鸿蒙运行和发行

共0课时 | 0人学习