C++ 如何反向遍历 STL map
Map 将元素以键的排序顺序存储。现在,如果我们想要反向遍历它,则需要使用 map 的 reverse_iterator。
语法:
map 的反向迭代器在递增方向上向后移动。因此,我们将把反向迭代器指向 map 的最后一个元素,然后不断递增它,直到它到达第一个元素。为此,我们将使用 std::map 的 2 个成员函数。
1. rbegin():它返回指向 map 的最后一个元素的反向迭代器。
2. rend():它返回指向 map 的第一个元素的反向迭代器。
现在,为了反向遍历,我们将使用反向迭代器迭代 rbegin() 和 rend() 之间的范围。
在 map 中进行反向迭代:
示例:
输入:(10, “geeks”), (20, “practice”), (5, “contribute”)
输出:(20, “practice”), (10, “geeks”), (5, “contribute”)
输出:
我们还可以使用 auto 来避免记住复杂的语法。
输出:
有关复杂度分析,请参见 end。
使用 map 的 key_type 范围进行反向迭代:
另一种反向遍历 map 的方法是使用 map 的 key_type 范围,并以反向顺序遍历键。
示例:
下面是实现代码:
输出
请参阅复杂性分析的结尾。
在multimap中进行反向迭代:
Multimap类似于map,但添加了多个元素可以具有相同的键。 在这种情况下,键值和映射值对必须是唯一的,而不是每个元素都是唯一的。
例子:
输出:
请参阅复杂性分析的结尾。
在不使用rbegin()或rend()函数的情况下,对映射进行反向迭代:
我们可以使用普通的 begin() 和 end() 函数以相反的顺序迭代映射。
例子:
以下是实现方式:
输出
参见复杂分析终点。
使用向量在map中进行翻转迭代:
我们可以创建一个具有map中所有元素的向量,然后使用std::reverse算法来翻转向量中的元素顺序,然后通过向量迭代访问倒序元素。
以下是实现方式:
输出
参见复杂分析终点。
使用cbegin()和cend()在map中进行翻转迭代:
cend()和cbegin()是C++标准模板库中map容器的成员函数。cbegin()返回指向容器中第一个元素的迭代器,而cend()返回指向容器中最后一个元素后面的位置的迭代器。通过使用这些函数,我们可以倒序遍历map的元素。
输入: (15, “Geeks”), (25, “GFG”), (10, “GeeksForGeeks”)
输出: (25, “GFG”), (15, “Geeks”), (10, “GeeksForGeeks”)
以下是实现方式:
输出
复杂度分析见下文。
使用crbegin()和crend()在映射中进行反向迭代:
crbegin()和crend()是C++标准模板库中映射容器的成员函数。它们返回常量迭代器,分别指向容器的最后一个元素和第一个元素。通过使用这些函数,我们可以以反向顺序遍历映射的元素。
输入:(15, “Geeks”), (25, “GFG”), (10, “GeeksForGeeks”)
输出:(25, “GFG”), (15, “Geeks”), (10, “GeeksForGeeks”)
下面是实现方式:
输出
复杂度分析见下文。
复杂度分析:
方法 | 时间复杂度 | 辅助空间 |
---|---|---|
在映射中使用反向迭代 | O(N) O(1) | |
使用map的key_type Range | O(N) | O(1) |
在multimap中 | O(N) | O(1) |
不使用rbegin()或rend()函数 | O(N) | O(1) |
使用vector | O(N) | O(N) |
使用cbegin()和cend() | O(N) | O(1) |
使用crbegin()和crend() | O(N) | O(1) |