新闻中心

C++ map遍历的几种方式_C++ map迭代器与C++11 range for循环

2025-11-28
浏览次数:
返回列表
C++中遍历std::map的常见方式包括:传统迭代器适用于所有标准,const_iterator用于只读访问,auto简化迭代器声明,C++11 range for循环推荐使用,C++17结构化绑定更清晰。

c++ map遍历的几种方式_c++ map迭代器与c++11 range for循环

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世界 N世界

一分钟搭建会展元宇宙

N世界 138 查看详情 N世界
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方案解析  腾讯视频怎么使用多账号家庭管理_腾讯视频家庭多账号统一管理与权限分配教程 

搜索