新闻中心
C++ map遍历的几种方式_C++ map迭代器与C++11 range for循环
C++中遍历std::map的常见方式包括:传统迭代器适用于所有标准,const_iterator用于只读访问,auto简化迭代器声明,C++11 range for循环推荐使用,C++17结构化绑定更清晰。

C++ 中 std::map 是一种常用的关联容器,用于存储键值对(key-value pairs),并自动按键排序。在实际开发中,经常需要遍历 map 中的所有元素。本文介绍几种常见的 C++ map 遍历方式,包括传统迭代器和 C++11 引入的 range for 循环。
使用传统迭代器遍历
这是最经典、兼容性最好的方式,适用于所有 C++ 标准版本。
通过 begin() 和 end() 获取迭代器,然后用循环逐个访问元素。
#include <map>
#include <iostream>
<p>std::map<int, std::string> myMap = {{1, "apple"}, {2, "banana"}, {3, "cherry"}};</p><p>for (std::map<int, std::string>::iterator it = myMap.begin(); it != myMap.end(); ++it) {
std::cout << "Key: " << it->first << ", Value: " << it->second << std::endl;
}</p>说明:
- it->first 访问键(key)
- it->second 访问值(value)
- 迭代器是双向迭代器,支持 ++ 和 -- 操作
使用 const_iterator(只读遍历)
如果你只是读取 map 内容而不修改,建议使用 const_iterator,提高代码安全性。
for (std::map<int, std::string>::const_iterator it = myMap.begin(); it != myMap.end(); ++it) {
std::cout << "Key: " << it->first << ", Value: " << it->second << std::endl;
}
这种方式能防止意外修改 map 元素,适合在 const 函数或只读场景中使用。
使用 auto 简化迭代器声明(C++11 起)
C++11 支持 auto 关键字,可避免冗长的类型声明。
N世界
一分钟搭建会展元宇宙
138
查看详情
for (auto it = myMap.begin(); it != myMap.end(); ++it) {
std::cout << "Key: " << it->first << ", Value: " << it->second << std::endl;
}
代码更简洁,且易于维护。如果 map 类型改变,无需修改循环中的类型。
使用 C++11 range for 循环(推荐)
C++11 引入了基于范围的 for 循环(range-based for),语法更直观。
for (const auto& pair : myMap) {
std::cout << "Key: " << pair.first << ", Value: " << pair.second << std::endl;
}
说明:
-
pair 是 map 中每个元素的类型,即 std::pair
- 使用 const auto& 可避免拷贝,提升性能
- 只读场景下推荐加 const,防止误修改
若你需要修改 value(注意:不能修改 key),可以使用非 const 引用:
for (auto& pair : myMap) {
pair.second += "_modified"; // 合法:修改 value
// pair.first = 100; // 非法:key 是 const,不可修改
}
使用结构化绑定(C++17 起,额外补充)
如果你使用 C++17 或更高版本,可以进一步简化:
for (const auto& [key, value] : myMap) {
std::cout << "Key: " << key << ", Value: " << value << std::endl;
}
语法更清晰,直接解包键值,是目前最推荐的写法(若编译器支持)。
基本上就这些常见方式。从兼容性考虑可用传统迭代器,新项目建议使用 range for + auto 或结构化绑定,代码更简洁安全。
以上就是C++ map遍历的几种方式_C++ map迭代器与C++11 range for循环的详细内容,更多请关注其它相关文章!
# 结构化
# 学seo需要自己编程吗
# 园林公司营销推广文案
# 泰州自助网站建设项目
# 营销推广和创造产品的区别
# 沙井seo推广电话
# 张家港神马网站优化
# 营销圈层推广是什么工作
# 安徽网站关键字优化软件
# 网站排名seo教程下载
# 网站外链的优化建议
# 操作方法
# 如何使用
# 适用于
# app
# 如果你
# 绑定
# 键值
# 几种
# 迭代
# 遍历
# 键值对
# stream
# apple
# ios
# c++
# ai
相关栏目:
【
科技资讯46185 】
【
网络学院92790 】
相关推荐:
MAC如何安全彻底地删除文件_MAC使用终端命令确保文件无法被恢复
神庙逃亡小游戏在线玩 神庙逃亡小游戏入口
sublime如何优雅地处理行尾空格_sublime自动清理多余空白字符配置
c++如何使用TBB库进行任务并行_c++ Intel线程构建模块
Golang如何通过reflect操作map_Golang reflect map操作与遍历技巧
新手怎么开始学化妆 零基础化妆入门教程
汽车之家官方网站官网入口_汽车之家网页版直接进入
在J*a中如何开发简易仓库管理与库存统计_仓库管理库存统计项目实战解析
Windows电脑怎么截图最方便_系统自带截图工具的5种神仙用法【技巧】
深入理解J*aScript中的B样条曲线与节点向量生成
Surface怎么安装系统 微软Surface Pro U盘重装win11教程
Excel函数批量查找替换超快方法_Excel用REPLACE和FIND函数秒级替换
GemBox Document HTML转PDF垂直文本渲染问题及解决方案
PHP中获取MongoDB服务器运行时间(Uptime)的专业指南
电脑安装程序提示“错误1722”怎么办_Windows Installer服务问题解决【教程】
win11开机启动修复循环怎么办 Win11无法进入系统高级启动解决方法【修复】
AO3最新可访问网址 Archive of Our Own官方在线入口
C++如何连接MySQL数据库_C++使用Connector/C++操作MySQL数据库教程
在Go语言中利用后缀数组处理多字符串:实现高效文本匹配与自动补全
PySpark中高效提取字符串右侧可变长度数字:使用regexp_extract
黑鲨3Pro怎样在相册开漫画风滤镜_iPhone黑鲨3Pro相册开漫画风滤镜【趣味滤镜】
CSS实现侧边栏导航项全宽圆角悬停背景效果
QQ邮箱网页版快速登录 QQ邮箱邮箱账号官方入口地址
Composer如何在生产环境安全地执行composer update
快手赚钱渠道_快手收益来源
Windows10怎么开启存储感知 Windows10系统设置自动清理临时文件释放C盘空间【教程】
J*aScript map 方法中处理循环元素为空数组的策略
小猿搜题在线学习页面在哪_小猿搜题在线学习中心入口
Yandex搜索引擎官方地址 俄罗斯网络世界的主要入口
抖音网页版怎么|直播|_抖音网页版开播操作指南
如何在J*a中使用Locale处理多语言环境
邮政快递包裹最新位置 邮政快递实时追踪入口
汽水音乐车机版8.9下载 汽水音乐车机版8.9版本安装入口
如何在Promise链中优雅地中断后续then执行
在Qt QML中通过Python字典动态更新TextEdit内容的教程
Python字典中优雅地迭代剩余元素的方法
C++ string find函数返回值npos详解_C++字符串查找失败的判断条件
windows10怎么查看本机ip_windows10命令提示符ipconfig使用
深入理解Go语言中的指针类型:以*string为例
c++中的std::launder有什么实际用途_c++对象生命周期与指针优化
夸克浏览器桌面版同步不了书签怎么处理 夸克浏览器跨设备同步异常解决方案
Shopware订单对象中获取产品自定义字段的正确方法
解决Flask中Quill编辑器内容提交失败及TypeError的指南
Windows10怎么开启夜间模式 Windows10系统设置调整色温与亮度缓解夜间用眼疲劳【教程】
提升屏幕阅读器对“m”时间单位的播报准确性:HTML与CSS组合解决方案
如何高效处理PHP中的Excel数据导入导出?PortPHP/Spreadsheet助你轻松搞定!
Safari自带网页翻译功能怎么用 无需插件轻松看懂外文网站【方法】
《明末:渊虚之羽》设计师谈设计角色:那会刚毕业 充满激情
纯CSS与HTML网格布局的HTML精简策略:SVG与JS方案解析
腾讯视频怎么使用多账号家庭管理_腾讯视频家庭多账号统一管理与权限分配教程


2025-11-28
浏览次数:次
返回列表