0

0

c++ map如何遍历和查找元素_c++中map容器常用操作与使用技巧

裘德小鎮的故事

裘德小鎮的故事

发布时间:2025-11-10 13:47:03

|

739人浏览过

|

来源于php中文网

原创

C++中map是基于红黑树的关联容器,支持O(log n)时间复杂度的查找、插入和删除。1. 遍历方式包括迭代器、范围for循环(推荐使用const auto&)和C++17结构化绑定;2. 查找方法有find()(返回迭代器)、count()(判断存在性)、at()(越界抛异常)和operator[](不存在时插入默认值,慎用于只读场景);3. 常用操作:insert/emplace插入元素,erase删除元素,empty/size判断状态,支持自定义比较器(如std::greater)实现降序或复杂类型排序;4. 遍历时删除需用erase返回的迭代器避免失效问题。熟练掌握这些技巧可提升代码效率与安全性。

c++ map如何遍历和查找元素_c++中map容器常用操作与使用技巧

在C++中,map 是一个非常常用的关联容器,用于存储键值对(key-value pairs),并自动根据键进行排序。它基于红黑树实现,查找、插入和删除的时间复杂度为 O(log n)。下面介绍 map 的遍历、查找以及一些常用操作和技巧。

如何遍历 map

遍历 map 有多种方式,最常见的是使用迭代器和范围 for 循环(C++11 起支持)。

1. 使用迭代器遍历:

#include 
#include 

std::map myMap = {{1, "Alice"}, {2, "Bob"}, {3, "Charlie"}};

for (auto it = myMap.begin(); it != myMap.end(); ++it) {
    std::cout << "Key: " << it->first 
              << ", Value: " << it->second << std::endl;
}

2. 使用范围 for 循环(推荐):

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

for (const auto& pair : myMap) {
    std::cout << "Key: " << pair.first 
              << ", Value: " << pair.second << std::endl;
}

如果不想修改值,建议使用 const auto& 避免拷贝,提升性能。

3. 使用结构化绑定(C++17):

for (const auto& [key, value] : myMap) {
    std::cout << "Key: " << key << ", Value: " << value << std::endl;
}

语法更简洁,可读性更强。

如何查找元素

map 提供了多种查找方法,适用于不同场景。

1. find() 方法:

返回指向元素的迭代器,若未找到则返回 end()。适合需要判断是否存在并获取值的情况。

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

2. count() 方法:

返回键出现的次数(map 中最多为 1)。适合只关心是否存在的情况。

if (myMap.count(2)) {
    std::cout << "Key 2 exists" << std::endl;
}

3. at() 方法:

LongShot
LongShot

LongShot 是一款 AI 写作助手,可帮助您生成针对搜索引擎优化的内容博客。

下载

通过键访问值,若键不存在会抛出 std::out_of_range 异常。适合确定键一定存在时使用。

try {
    std::cout << myMap.at(1) << std::endl;
} catch (const std::out_of_range& e) {
    std::cout << "Key not found!" << std::endl;
}

4. operator[]:

如果键不存在,会自动插入一个默认构造的值。注意:这可能改变 map 内容。

std::cout << myMap[1]; // 安全
std::cout << myMap[999]; // 若999不存在,会插入 {999, ""}

因此,仅用于查找时不推荐使用 [],除非你确实想插入默认值。

常用操作与技巧

掌握这些技巧能让你更高效地使用 map。

1. 插入元素:

  • myMap.insert({key, value}); —— 推荐方式,避免重复插入
  • myMap[key] = value; —— 若已存在会覆盖
  • myMap.emplace(key, value); —— 原地构造,效率更高

2. 删除元素:

  • myMap.erase(key); —— 按键删除
  • myMap.erase(it); —— 按迭代器删除

3. 判断是否为空或获取大小:

  • myMap.empty() —— 返回 true 表示为空
  • myMap.size() —— 返回元素个数

4. 自定义比较函数:

例如按降序排列

std::map> descMap;

5. 处理多关键字或复杂类型:

map 支持自定义类型作为 key,前提是提供可比较的 operator

6. 遍历时删除元素:

必须小心使用迭代器失效问题:

for (auto it = myMap.begin(); it != myMap.end();) {
    if (shouldRemove(it->first)) {
        it = myMap.erase(it); // erase 返回下一个有效迭代器
    } else {
        ++it;
    }
}
基本上就这些。熟练掌握 map 的遍历、查找和常用技巧,能显著提升代码效率和可读性。

相关专题

更多
counta和count的区别
counta和count的区别

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

193

2023.11.20

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

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

519

2023.09.20

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

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

73

2025.09.05

golang map相关教程
golang map相关教程

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

25

2025.11.16

golang map原理
golang map原理

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

36

2025.11.17

java判断map相关教程
java判断map相关教程

本专题整合了java判断map相关教程,阅读专题下面的文章了解更多详细内容。

31

2025.11.27

php源码安装教程大全
php源码安装教程大全

本专题整合了php源码安装教程,阅读专题下面的文章了解更多详细内容。

61

2025.12.31

php网站源码教程大全
php网站源码教程大全

本专题整合了php网站源码相关教程,阅读专题下面的文章了解更多详细内容。

40

2025.12.31

视频文件格式
视频文件格式

本专题整合了视频文件格式相关内容,阅读专题下面的文章了解更多详细内容。

32

2025.12.31

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
10分钟--Midjourney创作自己的漫画
10分钟--Midjourney创作自己的漫画

共1课时 | 0.1万人学习

Midjourney 关键词系列整合
Midjourney 关键词系列整合

共13课时 | 0.9万人学习

AI绘画教程
AI绘画教程

共2课时 | 0.2万人学习

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

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