C++ map怎么遍历key C++ map迭代器获取键值对方法【STL】

发布时间 - 2026-01-28 00:00:00    点击率:
遍历map的key最常用方式是for(const auto& kv : m)访问kv.first;需用const引用避免拷贝,key不可修改;可提取key到vector等容器进行后续操作;传统迭代器it->first也可用;find和[]非遍历方法,自定义key须支持

for 循环 + auto 遍历 mapkey

最常用、最直观的方式是直接遍历 map,每个迭代器元素本身就是 std::pair 类型,.first 就是 key

std::map m = {{1, "a"}, {2, "b"}, {3, "c"}};
for (const auto& kv : m) {
    std::cout << kv.first << std::endl; // 输出 key:1 2 3
}

注意必须用 const auto&(或 auto&),否则会触发

pair 拷贝,虽不报错但低效;kv.first 是只读的,因为 map 的 key 是 const

单独提取所有 keyvector 或其他容器

如果后续要对 key 做排序、去重(虽然 map 本身已有序)、查找等操作,可以先把 key 拷出来:

std::vector keys;
keys.reserve(m.size());
for (const auto& kv : m) {
    keys.push_back(kv.first);
}

常见错误:写成 keys.push_back(m.key()) —— map 没有 key() 成员函数;也别误用 m.begin()->keyiterator 解引用得到的是 pair,不是自定义结构体。

用传统迭代器显式访问 keyvalue

老式写法仍有效,尤其在需要控制遍历起止位置(如部分遍历)或兼容旧代码时:

  • m.begin() 返回 std::map::iterator,解引用后是 std::pair&
  • it->firstkeyit->secondvalue
  • 不要写 (*it).first,虽合法但不如 it->first 清晰
for (auto it = m.begin(); it != m.end(); ++it) {
    std::cout << it->first << ": " << it->second << std::endl;
}

map::find()operator[] 不是遍历方法,别混用

这两个是单次查找接口,不能用来“获取所有 key”:

  • m.find(k) 返回指向匹配 pair 的迭代器,没找到返回 m.end()
  • m[k] 会**默认构造并插入**不存在的 key,副作用极大,遍历时绝对不能用
  • 想判断 key 是否存在,用 m.count(k) == 1m.find(k) != m.end(),不是遍历手段

真正容易被忽略的是:map 的 key 类型必须支持 (默认按升序排列),如果你用自定义类型作 key 却没定义 operator 或提供比较器,编译会直接失败——这时候连遍历都写不出来。


# ai  # c++  # 键值对  # 排列  # count  # for  # 成员函数  # const  # auto  # 结构体  # 循环  # 接口  # operator  # map  # 遍历  # 自定义  # 的是  # 迭代  # 最常用  # 升序  # 这两个  # 不存在  # 或其他  # 绝对不 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Android使用GridView实现日历的简单功能  Python自动化办公教程_ExcelWordPDF批量处理案例  Laravel任务队列怎么用_Laravel Queues异步处理任务提升应用性能  高端网站建设与定制开发一站式解决方案 中企动力  Android中Textview和图片同行显示(文字超出用省略号,图片自动靠右边)  想要更高端的建设网站,这些原则一定要坚持!  Laravel如何使用Contracts(契约)进行编程_Laravel契约接口与依赖反转  韩国网站服务器搭建指南:VPS选购、域名解析与DNS配置推荐  如何在阿里云高效完成企业建站全流程?  PHP的CURL方法curl_setopt()函数案例介绍(抓取网页,POST数据)  Java垃圾回收器的方法和原理总结  网站设计制作书签怎么做,怎样将网页添加到书签/主页书签/桌面?  微信小程序 五星评分(包括半颗星评分)实例代码  Laravel如何升级到最新的版本_Laravel版本升级流程与兼容性处理  VIVO手机上del键无效OnKeyListener不响应的原因及解决方法  uc浏览器二维码扫描入口_uc浏览器扫码功能使用地址  Laravel如何处理表单验证?(Requests代码示例)  文字头像制作网站推荐软件,醒图能自动配文字吗?  如何彻底删除建站之星生成的Banner?  家族网站制作贴纸教程视频,用豆子做粘帖画怎么制作?  移动端脚本框架Hammer.js  中山网站推广排名,中山信息港登录入口?  详解免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)  零服务器AI建站解决方案:快速部署与云端平台低成本实践  Windows11怎样设置电源计划_Windows11电源计划调整攻略【指南】  如何批量查询域名的建站时间记录?  如何快速重置建站主机并恢复默认配置?  购物网站制作费用多少,开办网上购物网站,需要办理哪些手续?  js代码实现下拉菜单【推荐】  JS实现鼠标移上去显示图片或微信二维码  如何用已有域名快速搭建网站?  常州企业网站制作公司,全国继续教育网怎么登录?  Laravel如何优化应用性能?(缓存和优化命令)  轻松掌握MySQL函数中的last_insert_id()  网页设计与网站制作内容,怎样注册网站?  Laravel如何实现RSS订阅源功能_Laravel动态生成网站XML格式订阅内容【教程】  北京网站制作的公司有哪些,北京白云观官方网站?  猪八戒网站制作视频,开发一个猪八戒网站,大约需要多少?或者自己请程序员,需要什么程序员,多少程序员能完成?  Laravel如何操作JSON类型的数据库字段?(Eloquent示例)  Laravel怎么做数据加密_Laravel内置Crypt门面的加密与解密功能  Windows10如何删除恢复分区_Win10 Diskpart命令强制删除分区  b2c电商网站制作流程,b2c水平综合的电商平台?  JavaScript如何实现路由_前端路由原理是什么  Win11搜索栏无法输入_解决Win11开始菜单搜索没反应问题【技巧】  Laravel中间件起什么作用_Laravel Middleware请求生命周期与自定义详解  微信h5制作网站有哪些,免费微信H5页面制作工具?  广州网站制作公司哪家好一点,广州欧莱雅百库网络科技有限公司官网?  Laravel怎么在Blade中安全地输出原始HTML内容  如何快速登录WAP自助建站平台?  如何生成腾讯云建站专用兑换码?