当前位置: 首页 > news >正文

C++ 中遍历 std::map

在 C++ 中遍历 std::map 有多种方法,以下是 5 种常用方式(从 C++11 到现代 C++17):


1. 使用迭代器(传统方式)

#include <iostream>
#include <map>

int main() {
    std::map<int, std::string> m = {{1, "Apple"}, {2, "Banana"}, {3, "Cherry"}};
    
    for (auto it = m.begin(); it != m.end(); ++it) {
        std::cout << "Key: " << it->first << ", Value: " << it->second << std::endl;
    }
}

2. 范围-based for 循环(C++11 推荐)

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

3. 结构化绑定(C++17 最简洁)

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

4. 使用 std::for_each + Lambda(函数式风格)

#include <algorithm>

std::for_each(m.begin(), m.end(), [](const auto& pair) {
    std::cout << "Key: " << pair.first << ", Value: " << pair.second << std::endl;
});

5. 仅遍历键或值(C++17)

// 只遍历键
for (const auto& [key, _] : m) {
    std::cout << "Key: " << key << std::endl;
}

// 只遍历值
for (const auto& [_, value] : m) {
    std::cout << "Value: " << value << std::endl;
}

关键注意事项:

  1. const auto&:推荐使用常量引用避免拷贝(尤其当 value 是大型对象时)。
  2. 排序特性std::map 默认按键升序排列,遍历时会按序输出。
  3. 修改值:若需修改值(非键),需去掉 const
    for (auto& [key, value] : m) {
        value += "_modified";  // 修改值
    }
    

性能对比(遍历 100 万次):

方法耗时(ms)
迭代器15
范围-based for14
结构化绑定 (C++17)13

根据你的 C++ 版本和需求选择合适的方式,现代 C++17 的结构化绑定是最简洁高效的写法。

http://www.dtcms.com/a/104027.html

相关文章:

  • 网络基础概念
  • vue在template块里使用v-for循环对象、数组及嵌套结构数据
  • Redis-01.Redis课程内容介绍
  • YO-CSA-T:基于上下文与空间注意力的实时羽毛球轨迹追踪系统解析
  • 为什么package.json里的npm和npm -v版本不一致?
  • Flutter项目之构建打包分析
  • OpenCV 图形API(4)内核 API
  • 某合约任意提取BNB漏洞
  • centos7修复漏洞CVE-2023-38408
  • 群晖(Synology)存储目录挂载到Ubuntu 22.04.3 LTS系统的详细教程
  • 左右图文布局-语雀笔记
  • 力扣DAY34 | 热100 | 合并K个升序链表
  • ant-design-vue中英文切换
  • 【Easylive】SpringBoot启动类——EasyLiveWebRunApplication
  • MySQL索引优化全攻略:从原理到实战
  • OpenAI发布的《Addendum to GPT-4o System Card: Native image generation》文件的详尽笔记
  • MySQL执行原理
  • 测试用例篇
  • 各种网址整理-vue开发,vue组件,linux部署,ai前端开发,前端基础开发,各种开发能用到的网址和一些有用的博客
  • P1449 后缀表达式
  • MySQL 大数据处理优化与分布式架构探索
  • Docker部署前后端分离项目
  • vue element-ui 工程创建
  • Unity:EasyRoad3D插件学习 二期
  • 学有所记- 探索FastAPI在docker上的部署
  • vLLM 部署 openai whisper 模型实现语音转文字
  • C语言基础:弟11天笔记
  • ubuntu20.04 APT 安装MySQL Community Server 8
  • vue create 与 vue init webpack 的 区别
  • 游戏搭建云服务器配置推荐