如何在 C++ 中对 Map 进行迭代

Jinku Hu 2023年10月12日
  1. 使用 while 循环在 std::map 元素上迭代
  2. 使用传统的 for 循环在 std::map 元素上迭代
  3. 使用基于范围的 for 循环迭代 std::map 元素
  4. 使用基于范围的 for 循环迭代 std::map 键-值对
如何在 C++ 中对 Map 进行迭代

本文将解释如何在 C++ 中使用多种方法对 map 进行迭代。

使用 while 循环在 std::map 元素上迭代

首先,我们定义一个临时映射结构 tempMap,并在其中填充任意的键/值对,我们将在 stdout 输出,以更好地展示建议的解决方案。

#include <iostream>
#include <map>

using std::cin;
using std::cout;
using std::endl;
using std::map;
using std::string;

int main() {
  map<int, string> tempMap = {{
                                  1,
                                  "Apple",
                              },
                              {
                                  2,
                                  "Banana",
                              },
                              {
                                  3,
                                  "Mango",
                              },
                              {
                                  4,
                                  "Raspberry",
                              },
                              {
                                  5,
                                  "Blackberry",
                              },
                              {
                                  6,
                                  "Cocoa",
                              }};

  auto iter = tempMap.begin();
  while (iter != tempMap.end()) {
    cout << "[" << iter->first << "," << iter->second << "]\n";
    ++iter;
  }
  cout << endl;
  return 0;
}

输出:

[1,Apple]
[2,Banana]
[3,Mango]
[4,Raspberry]
[5,Blackberry]
[6,Cocoa]

请注意,我们使用 auto 类型指定符来声明 std::map 迭代器,因为为了可读性,推荐使用这种方法。它是 map<int, string>::iterator,可以显式指定。

使用传统的 for 循环在 std::map 元素上迭代

现在,让我们用传统的 for 迭代来实现同样的循环,这可以说是在可读性上最差的。

#include <iostream>
#include <map>

using std::cin;
using std::cout;
using std::endl;
using std::map;
using std::string;

int main() {
  map<int, string> tempMap = {{
                                  1,
                                  "Apple",
                              },
                              {
                                  2,
                                  "Banana",
                              },
                              {
                                  3,
                                  "Mango",
                              },
                              {
                                  4,
                                  "Raspberry",
                              },
                              {
                                  5,
                                  "Blackberry",
                              },
                              {
                                  6,
                                  "Cocoa",
                              }};

  for (auto iter = tempMap.begin(); iter != tempMap.end(); ++iter) {
    cout << "[" << iter->first << "," << iter->second << "]\n";
  }
  cout << endl;
  return 0;
}

使用基于范围的 for 循环迭代 std::map 元素

一段时间以来,基于范围的循环一直是 C++ 程序员的普遍选择。如果你的编译器支持 C++11 版本,那么你就不用再考虑传统的繁琐循环了,可以欣赏下面这个例子的优雅。

#include <iostream>
#include <map>

using std::cin;
using std::cout;
using std::endl;
using std::map;
using std::string;

int main() {
  map<int, string> tempMap = {{
                                  1,
                                  "Apple",
                              },
                              {
                                  2,
                                  "Banana",
                              },
                              {
                                  3,
                                  "Mango",
                              },
                              {
                                  4,
                                  "Raspberry",
                              },
                              {
                                  5,
                                  "Blackberry",
                              },
                              {
                                  6,
                                  "Cocoa",
                              }};

  for (const auto &item : tempMap) {
    cout << "[" << item.first << "," << item.second << "]\n";
  }
  cout << endl;
  return 0;
}

使用基于范围的 for 循环迭代 std::map 键-值对

这个版本从 C++17 标准开始定义,以在关联容器中提供更灵活的迭代。与之前的例子相比,该方法的主要优势在于方便地访问 map 结构中的键值,这也保证了程序员更好的可读性。

#include <iostream>
#include <map>

using std::cin;
using std::cout;
using std::endl;
using std::map;
using std::string;

int main() {
  map<int, string> tempMap = {{
                                  1,
                                  "Apple",
                              },
                              {
                                  2,
                                  "Banana",
                              },
                              {
                                  3,
                                  "Mango",
                              },
                              {
                                  4,
                                  "Raspberry",
                              },
                              {
                                  5,
                                  "Blackberry",
                              },
                              {
                                  6,
                                  "Cocoa",
                              }};

  for (const auto& [key, value] : tempMap) {
    cout << "[" << key << "," << value << "]\n";
  }
  cout << endl;
  return 0;
}
作者: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

DelftStack.com 创始人。Jinku 在机器人和汽车行业工作了8多年。他在自动测试、远程测试及从耐久性测试中创建报告时磨练了自己的编程技能。他拥有电气/电子工程背景,但他也扩展了自己的兴趣到嵌入式电子、嵌入式编程以及前端和后端编程。

LinkedIn Facebook

相关文章 - C++ Map