如何反向遍历 STL map?
在 C++ STL 中,map 是一个非常方便的数据结构,用于存储键值对。map 内部的元素是按照键值的大小自动排序的,因此可以通过 key 进行快速查找和访问。但是有时候,我们需要反向遍历 map 中的元素。本文将介绍如何使用 C++11 中引入的 reverse_iterator 迭代器实现 map 的反向遍历。
步骤
下面是使用 C++11 中的 reverse_iterator 实现反向遍历 map 的步骤:
- 定义一个 map 容器。
#include <iostream>
#include <map>
int main() {
std::map<std::string, int> mp;
mp["one"] = 1;
mp["two"] = 2;
mp["three"] = 3;
mp["four"] = 4;
mp["five"] = 5;
}
- 使用 rbegin 和 rend 方法创建一个 reverse_iterator 迭代器。
auto riter = mp.rbegin();
auto rend = mp.rend();
注:
- rbegin() 返回一个指向 map 的最后一个元素的反向迭代器(也就是键值最大的元素),rend() 返回一个指向 map 的第一个元素之前的反向迭代器(也就是最小的元素之前)。
- 使用循环结构遍历 map 中的元素,并输出键值对。
for (; riter != rend; ++riter) {
std::cout << riter->first << " : " << riter->second << std::endl;
}
完整代码如下:
#include <iostream>
#include <map>
int main() {
std::map<std::string, int> mp;
mp["one"] = 1;
mp["two"] = 2;
mp["three"] = 3;
mp["four"] = 4;
mp["five"] = 5;
auto riter = mp.rbegin();
auto rend = mp.rend();
for (; riter != rend; ++riter) {
std::cout << riter->first << " : " << riter->second << std::endl;
}
return 0;
}
输出结果如下:
five : 5
four : 4
three : 3
two : 2
one : 1
结论
使用 reverse_iterator 迭代器可以方便地反向遍历 STL map 容器。在实际开发中,我们经常需要遍历 map 容器,因此理解和掌握如何使用反向迭代器进行遍历是非常重要的。