在 C++ 中,有多种方法可以遍历 map 容器。遍历 map 的过程通常涉及迭代器。下面我们将介绍三种常见的遍历方法:使用迭代器、使用范围 for 循环和使用 for_each 算法。

基本用法

使用迭代器遍历

这是最基本的方法,适用于所有 C++ 标准容器。迭代器可以让你精确控制遍历的过程。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include <map>

int main() {
std::map<int, std::string> myMap = {
{1, "one"},
{2, "two"},
{3, "three"}
};

for (std::map<int, std::string>::iterator it = myMap.begin(); it != myMap.end(); ++it) {
std::cout << it->first << ": " << it->second << std::endl;
}

return 0;
}

使用范围 for 循环遍历

C++11 引入了范围 for 循环,简化了遍历容器的过程。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include <map>

int main() {
std::map<int, std::string> myMap = {
{1, "one"},
{2, "two"},
{3, "three"}
};

for (const auto& pair : myMap) {
std::cout << pair.first << ": " << pair.second << std::endl;
}

return 0;
}

使用 for_each 算法遍历

for_each 算法需要包含头文件 <algorithm> 和一个回调函数。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <map>
#include <algorithm>

void printPair(const std::pair<int, std::string>& p) {
std::cout << p.first << ": " << p.second << std::endl;
}

int main() {
std::map<int, std::string> myMap = {
{1, "one"},
{2, "two"},
{3, "three"}
};

std::for_each(myMap.begin(), myMap.end(), printPair);

return 0;
}

特点和注意事项

  1. 使用迭代器:迭代器方法灵活且功能强大,适用于需要对元素进行复杂操作的情况。
  2. 范围 for 循环:简洁且易于阅读,适用于大多数遍历需求。
  3. for_each 算法:适用于需要将操作封装成独立函数的情况,可以使代码更加模块化。

注意:如果使用迭代器对map容器进行遍历,可以使用distance方法获得当前迭代器的下标distance(mp.begin(), it);

示例代码

以下是一个综合示例,展示了三种遍历方法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <iostream>
#include <map>
#include <algorithm>

void printPair(const std::pair<int, std::string>& p) {
std::cout << p.first << ": " << p.second << std::endl;
}

int main() {
std::map<int, std::string> myMap = {
{1, "one"},
{2, "two"},
{3, "three"}
};

// 使用迭代器遍历
std::cout << "Using iterator:" << std::endl;
for (std::map<int, std::string>::iterator it = myMap.begin(); it != myMap.end(); ++it) {
std::cout << it->first << ": " << it->second << std::endl;
}

// 使用范围 for 循环遍历
std::cout << "Using range-based for loop:" << std::endl;
for (const auto& pair : myMap) {
std::cout << pair.first << ": " << pair.second << std::endl;
}

// 使用 for_each 算法遍历
std::cout << "Using for_each algorithm:" << std::endl;
std::for_each(myMap.begin(), myMap.end(), printPair);

return 0;
}

输出结果如下:

1
2
3
4
5
6
7
8
9
10
11
12
Using iterator:
1: one
2: two
3: three
Using range-based for loop:
1: one
2: two
3: three
Using for_each algorithm:
1: one
2: two
3: three

总结

遍历 map 容器有多种方法,每种方法都有其适用场景和优缺点。使用迭代器方法灵活但代码较长,范围 for 循环简洁易读,for_each 算法适用于需要模块化的场景。选择合适的方法可以使代码更加清晰和高效。


本站由 @anonymity 使用 Stellar 主题创建。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。