【std::map】遍历方式汇总

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

      • 1. 普通迭代器遍历(最基础方式)
      • 2. const迭代器遍历(只读场景)
      • 3. 反向迭代器遍历(逆序遍历)
      • 4. 范围for循环(C++11+,简洁)
      • 5. 结构化绑定 + 范围for(C++17+,更直观)
      • 6. std::for_each 算法(函数式风格,C++11+)
      • 总结

在C++中,std::map是一种有序关联容器,存储键值对(std::pair<const Key, T>)。遍历std::map的方式有多种,根据C++标准版本和使用场景可分为以下几类:

1. 普通迭代器遍历(最基础方式)

通过begin()end()获取迭代器,遍历所有键值对。迭代器指向的元素是std::pair<const Key, T>,其中first为键(不可修改),second为值(可修改)。

#include<iostream>#include<map>usingnamespacestd;intmain(){map<int,string>myMap={{1,"one"},{2,"two"},{3,"three"}};// 普通迭代器(可修改值)for(map<int,string>::iterator it=myMap.begin();it!=myMap.end();++it){cout<<"键:"<<it->first<<",值:"<<it->second<<endl;// 可以修改值(键不可修改,因为是const)// it->second += "_modified";}return0;}

2. const迭代器遍历(只读场景)

若只需读取元素(不修改),使用const_iterator更安全,通过cbegin()cend()获取。

// const迭代器(只读,不可修改值)for(map<int,string>::const_iterator it=myMap.cbegin();it!=myMap.cend();++it){cout<<"键:"<<it->first<<",值:"<<it->second<<endl;// 错误:it->second = "new"; (const迭代器不允许修改值)}

3. 反向迭代器遍历(逆序遍历)

通过rbegin()(指向最后一个元素)和rend()(指向第一个元素前的位置)实现逆序遍历,适用于需要从大到小访问的场景。

// 反向迭代器(逆序遍历)for(map<int,string>::reverse_iterator it=myMap.rbegin();it!=myMap.rend();++it){cout<<"键:"<<it->first<<",值:"<<it->second<<endl;}// const反向迭代器(逆序只读)for(map<int,string>::const_reverse_iterator it=myMap.crbegin();it!=myMap.crend();++it){cout<<"键:"<<it->first<<",值:"<<it->second<<endl;}

4. 范围for循环(C++11+,简洁)

C++11引入范围for循环,自动遍历容器,语法更简洁。需注意:遍历的元素是std::pair<const Key, T>的引用(避免拷贝)。

// 范围for(可读可写,通过引用)for(auto&pair:myMap){// auto 推导为 pair<const int, string>cout<<"键:"<<pair.first<<",值:"<<pair.second<<endl;// 可修改值:pair.second = "new_value";}// 范围for(只读,通过const引用)for(constauto&pair:myMap){cout<<"键:"<<pair.first<<",值:"<<pair.second<<endl;}

5. 结构化绑定 + 范围for(C++17+,更直观)

C++17的结构化绑定可直接将键值对拆分为键和值变量,无需通过pair.first/second访问,代码更清晰。

// 结构化绑定(C++17+):直接获取键和值for(auto&[key,value]:myMap){// key 对应 first,value 对应 secondcout<<"键:"<<key<<",值:"<<value<<endl;// 可修改值:value = "new_value";}// 只读版本for(constauto&[key,value]:myMap){cout<<"键:"<<key<<",值:"<<value<<endl;}

6. std::for_each 算法(函数式风格,C++11+)

结合<algorithm>库的std::for_each和 lambda 表达式,适合需要对元素执行特定操作的场景。

#include<algorithm>// 需包含此头文件// 使用std::for_each + lambdastd::for_each(myMap.begin(),myMap.end(),[](auto&pair){cout<<"键:"<<pair.first<<",值:"<<pair.second<<endl;});

总结

  • 基础场景:优先用范围for循环(C++11+)或结构化绑定(C++17+),简洁直观。
  • 需修改迭代器位置(如中途跳过元素):用普通迭代器
  • 逆序遍历:用反向迭代器
  • 只读场景:加const修饰(const_iteratorconst auto&)。
  • 函数式操作:用std::for_each结合 lambda。

注意:std::map的键是const类型,任何遍历方式都不能修改键,只能修改值(除非用只读方式)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1131169.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【学习笔记】《道德经》第63章

《道德经》第63章 选段&#xff1a;中英对照与解读 本节选自《道德经》第63章&#xff0c;阐述道家“无为”哲学、事物发展规律以及成就伟大的辩证智慧。以下按原文顺序逐段呈现中英对照&#xff0c;并附对应解读。 1. 为无为&#xff0c;事无事&#xff0c;味无味。大小多少&a…

如何解决 pip install 网络报错 ERROR: Could not find a version that satisfies the requirement requests

摘要 本文聚焦pip install安装requests库时出现的“ERROR: Could not find a version that satisfies the requirement requests (from versions: none)”报错&#xff0c;该报错核心并非“requests包不存在”&#xff0c;而是pip无法从PyPI源获取requests的可用版本列表&…

揭秘AI造相:如何用云端GPU快速体验Z-Image-Turbo的魔力

揭秘AI造相&#xff1a;如何用云端GPU快速体验Z-Image-Turbo的魔力 如果你是一名产品经理&#xff0c;想要快速评估AI图像生成技术在产品中的应用潜力&#xff0c;但苦于缺乏技术背景和本地硬件支持&#xff0c;那么Z-Image-Turbo可能是你的理想选择。这款基于通义造相技术的文…

Z-Image-Turbo多版本管理:一键切换不同模型配置的云端方案

Z-Image-Turbo多版本管理&#xff1a;一键切换不同模型配置的云端方案 作为一名AI内容创作者&#xff0c;我经常需要在不同项目中使用Z-Image-Turbo的各种版本和配置。本地环境管理不仅繁琐&#xff0c;还容易造成版本冲突和依赖问题。今天我要分享的是一种云端解决方案&#x…

typescript-数组和元组

今天我们开始复杂类型什么是数组&#xff1f;数组是一个可以保存多个同类型值的变量。可以通过索引来访问每一个位置中的值。&#xff08;注&#xff1a;程序中的索引是从0开始的&#xff0c;不是从1&#xff09;什么是元组&#xff1f;元组和数组差不多&#xff0c;是一个可以…

玩转AI造相:科哥定制版Z-Image-Turbo镜像一键部署指南

玩转AI造相&#xff1a;科哥定制版Z-Image-Turbo镜像一键部署指南 你是否曾被社交媒体上那些惊艳的AI生成图像吸引&#xff0c;却因为复杂的安装步骤望而却步&#xff1f;科哥定制版Z-Image-Turbo镜像正是为解决这一问题而生。本文将带你快速上手这款专为文生图优化的镜像&…

权限分级+加密存储+操作追溯,筑牢会计档案安全防线

在企业经营发展的全流程中&#xff0c;会计档案是记录经济活动、保障财税合规的核心载体&#xff0c;涵盖原始凭证、账簿报表、合同协议等关键资料&#xff0c;不仅关系到企业内部管理决策&#xff0c;更涉及税务稽查、审计核查等合规要求。电子会计档案成为主流&#xff0c;但…

B站视频列表与详情数据API调用完全指南

在数字化内容生态中&#xff0c;B站作为国内领先的视频平台&#xff0c;其海量视频数据具有极高的应用价值。无论是构建视频数据分析工具、开发第三方应用&#xff0c;还是实现视频内容聚合&#xff0c;都离不开对视频列表及详情数据的高效获取。本文将系统梳理B站相关API的调用…

告别本地渲染:云端GPU助力AI图像批量生成

告别本地渲染&#xff1a;云端GPU助力AI图像批量生成 作为一名3D动画师&#xff0c;你是否经常遇到这样的困境&#xff1a;需要渲染大量场景概念图&#xff0c;但本地电脑性能捉襟见肘&#xff0c;等待渲染的过程让人焦躁不已&#xff1f;本文将介绍如何利用云端GPU资源&#x…

信创背景下企业可观测平台选型指南

随着“十五五”数字经济规划开局与数字中国建设向纵深推进&#xff0c;信创产业已从“政策驱动”转向“政策市场”双轮驱动&#xff0c;企业IT架构国产化、自主可控、安全合规成为不可逆转的趋势。可观测平台作为IT运维的核心中枢&#xff0c;其选型不再仅聚焦功能完备性&#…

基于Springboo和vue开发的企业批量排班系统人脸识别考勤打卡系统

企业批量排班人脸识别考勤系统 演示视频 https://www.bilibili.com/video/BV1KU9iYsEBU/ 角色 管理员、普通员工 技术 SpringBoot、MySQL、Vue.js、ArcSoft人脸识别SDK、Maven、Lombok、PageHelper、Apache POI 核心功能 本系统是一款企业级批量排班与人脸识别考勤管理…

阿里通义Z-Image-Turbo WebUI在教育中的应用:快速搭建AI艺术课堂

阿里通义Z-Image-Turbo WebUI在教育中的应用&#xff1a;快速搭建AI艺术课堂 引言&#xff1a;当艺术教学遇上AI创作 作为一名艺术教师&#xff0c;你是否想过将AI绘画技术引入课堂&#xff1f;通过阿里通义Z-Image-Turbo WebUI&#xff0c;我们可以轻松搭建一个云端AI艺术课堂…

低成本实验:用按量付费GPU尝试Z-Image-Turbo的N种玩法

低成本实验&#xff1a;用按量付费GPU尝试Z-Image-Turbo的N种玩法 作为一名个人开发者&#xff0c;你是否对AI图像生成的各种应用场景充满好奇&#xff0c;但又担心云服务成本失控&#xff1f;本文将介绍如何利用Z-Image-Turbo镜像&#xff0c;在按量付费的GPU环境下低成本探索…

Z-Image-Turbo模型蒸馏实践:轻量化部署的云端实验环境

Z-Image-Turbo模型蒸馏实践&#xff1a;轻量化部署的云端实验环境 如果你是一名移动端开发者&#xff0c;希望将Z-Image-Turbo这样的强大图像生成模型蒸馏后部署到手机端&#xff0c;那么你可能会遇到一个棘手的问题&#xff1a;蒸馏实验对环境配置要求特殊&#xff0c;本地搭建…

inline内联函数两个特性

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录前言详细解释1. 类内定义函数的隐式inline特性2. inline的两个独立特性&#xff08;新手易混淆&#xff09;3. 类内定义 vs 类外inline定义&#xff08;头文件场景&a…

2026必备!10个AI论文平台,自考毕业论文轻松搞定!

2026必备&#xff01;10个AI论文平台&#xff0c;自考毕业论文轻松搞定&#xff01; AI 工具&#xff0c;让论文写作不再难 随着人工智能技术的不断发展&#xff0c;越来越多的自考学生开始借助 AI 工具来提升论文写作效率。尤其是在当前 AIGC&#xff08;人工智能生成内容&…

艺术治疗新工具:无障碍AI绘画环境搭建指南

艺术治疗新工具&#xff1a;无障碍AI绘画环境搭建指南 AI绘画技术正在改变艺术治疗的实践方式&#xff0c;但对于电脑技能有限的患者群体来说&#xff0c;复杂的安装和操作流程往往成为使用障碍。本文将介绍如何通过预置镜像快速搭建一个极度简化的AI绘画环境&#xff0c;支持…

使用 Selenium 爬取京东手机销量与评分数据 (1)

在电商数据分析场景中&#xff0c;京东作为头部电商平台&#xff0c;其手机品类的销量、评分数据是洞察市场趋势、分析用户偏好的核心依据。相较于静态网页爬取&#xff0c;京东采用动态渲染技术加载商品数据&#xff0c;传统的 RequestsBeautifulSoup 组合难以获取完整信息&am…

算法题 递增顺序搜索树

递增顺序搜索树 问题描述 给你一个二叉搜索树&#xff08;BST&#xff09;的根节点 root&#xff0c;请将其重新排列为一棵只有右子节点的递增顺序搜索树。 要求&#xff1a; 树中每个节点没有左子节点只有右子节点节点按照中序遍历的顺序排列 返回新树的根节点。 示例&#xf…

inline内联函数双重语义

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录前言一、先理清&#xff1a;inline的两个核心作用&#xff08;容易混淆&#xff09;二、头文件中写类成员函数的两种场景场景1&#xff1a;类体内部直接写函数实现&a…