C++如何遍历一个map?(代码示例)

16次阅读

c++中遍历std::map推荐使用基于范围的for循环,元素为std::pair类型,键用.first、值用.second访问;需删除元素时应使用迭代器配合erase()返回值,且map遍历结果按键升序排列

C++如何遍历一个map?(代码示例)

遍历 C++ 中的 std::map 有多种方式,最常用的是基于范围的 for 循环(C++11 起),也支持传统迭代器和 while 循环。关键点是:map 的每个元素是 std::pair 类型,访问键用 .first,值用 .second

用范围 for 循环(推荐)

简洁、安全、可读性高,适合大多数场景。

#include  #include  #include   int main() {     std::map m = {{1, "apple"}, {3, "banana"}, {2, "cherry"}};      // 自动推导类型:const std::pair&     for (const auto& kv : m) {         std::cout << "key=" << kv.first << ", value=" << kv.second << 'n';     }     // 输出按 key 升序:key=1, key=2, key=3(map 有序)      return 0; }

用迭代器遍历(兼容旧标准)

显式使用 begin()end(),适用于需控制遍历过程(如中途 break/erase)的场景。

for (auto it = m.begin(); it != m.end(); ++it) {     std::cout << "key=" << it->first << ", value=" << it->second << 'n'; }  // 或用 const_iterator(更严谨,尤其在 const map 上) for (std::map::const_iterator it = m.cbegin();      it != m.cend(); ++it) {     std::cout << it->first << " → " << it->second << 'n'; }

只遍历 key 或只遍历 value

如果只需要键或值,可用结构化绑定(C++17)或单独提取。

立即学习C++免费学习笔记(深入)”;

  • C++17 结构化绑定(清晰直观):

for (const auto& [k, v] : m) {     std::cout << "key: " << k << 'n';  // 只用 k     // std::cout << "value: " << v << 'n'; }

  • 传统方式(遍历中只取 it->firstit->second

遍历时安全删除元素

直接用范围 for 删除会失效迭代器。必须用迭代器 + erase() 返回值(C++11 起)。

// 删除所有 value == "apple" 的项 for (auto it = m.begin(); it != m.end(); ) {     if (it->second == "apple") {         it = m.erase(it); // erase 返回下一个有效迭代器     } else {         ++it;     } }

基本上就这些。选范围 for 最省心;需要删元素时务必用迭代器配合 erase 返回值;注意 map 天然按键升序排列,遍历结果总是有序的。

text=ZqhQzanResources