如何反向遍历 STL map?

如何反向遍历 STL map?

C++ STL 中,map 是一个非常方便的数据结构,用于存储键值对。map 内部的元素是按照键值的大小自动排序的,因此可以通过 key 进行快速查找和访问。但是有时候,我们需要反向遍历 map 中的元素。本文将介绍如何使用 C++11 中引入的 reverse_iterator 迭代器实现 map 的反向遍历。

步骤

下面是使用 C++11 中的 reverse_iterator 实现反向遍历 map 的步骤:

  1. 定义一个 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;
}
  1. 使用 rbegin 和 rend 方法创建一个 reverse_iterator 迭代器。
auto riter = mp.rbegin();
auto rend = mp.rend();

注:

  • rbegin() 返回一个指向 map 的最后一个元素的反向迭代器(也就是键值最大的元素),rend() 返回一个指向 map 的第一个元素之前的反向迭代器(也就是最小的元素之前)。
  1. 使用循环结构遍历 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 容器,因此理解和掌握如何使用反向迭代器进行遍历是非常重要的。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程