¿Cómo atravesar un mapa STL en dirección inversa?

Map almacena los elementos en orden ordenado de claves. Ahora, si queremos recorrerlo en orden inverso, usaremos reverse_iterator of map.

Sintaxis:

map::reverse_iterator iterator_name;

El iterador inverso del mapa se mueve hacia atrás en el incremento. Entonces, apuntaremos el iterador inverso al último elemento del mapa y luego seguiremos incrementándolo hasta que alcance el primer elemento. Para hacer esto, usaremos 2 funciones miembro de std::map, es decir
, 1. rbegin(): Devuelve el iterador inverso que apunta al último elemento del mapa.
2. rend() : Devuelve el iterador inverso que apunta al primer elemento del mapa.

Ahora, para atravesar en orden inverso, iteraremos sobre el rango b/w rbegin() & rend() usando reverse_iterator.
Iteración inversa en el mapa:
Ejemplo:

Input:  (10, "geeks"), (20, "practice"),  (5, " contribute")
Output : (20, "practice"),  (10, "geeks"), (5, " contribute")
// C++ program makes a map to iterate
// elements in reverse order.
#include <bits/stdc++.h>
using namespace std;
  
int main()
{
  
    // Creating & Initializing a map of String & Ints
    map<int, string> mymap;
  
    // Inserting the elements one by one
    mymap.insert(make_pair(10, "geeks"));
    mymap.insert(make_pair(20, "practice"));
    mymap.insert(make_pair(5, "contribute"));
  
    // Create a map reverse iterator
    map<int, string>::reverse_iterator it;
  
    // rbegin() returns to the last value of map
    for (it = mymap.rbegin(); it != mymap.rend(); it++) {
        cout << "(" << it->first << ", " 
             << it->second << ")" << endl;
    }
  
    return 0;
}
Producción:

(20, practice)
(10, geeks)
(5, contribute)

También podemos usar auto para evitar recordar sintaxis compleja.

// C++ program makes a map to iterate
// elements in reverse order with simpler
// syntax
#include <bits/stdc++.h>
using namespace std;
  
int main()
{
    // Creating & Initializing a map of String & Ints
    map<int, string> mymap;
  
    // Inserting the elements one by one
    mymap.insert(make_pair(10, "geeks"));
    mymap.insert(make_pair(20, "practice"));
    mymap.insert(make_pair(5, "contribute"));
  
    // rbegin() returns to the last value of map
    for (auto it = mymap.rbegin(); it != mymap.rend(); it++) {
        cout << "(" << it->first << ", " 
             << it->second << ")" << endl;
    }
  
    return 0;
}
Producción:

(20, practice)
(10, geeks)
(5, contribute)

Iteración inversa en multimap :
Multimap es similar al mapa con la adición de que varios elementos pueden tener las mismas claves. En lugar de que cada elemento sea único, el par de valor clave y valor asignado tiene que ser único en este caso.

Ejemplo:

Input :  (10, "geeks"), (20, "practice"),  (5, "contribute"), 
         (20, "van"), (20, "watch"), (5, "joker")
Output:  (20, "watch"), (20, "van"), (20, "practice"), 
         (10, "geeks"), (5, "joker"), (5, "contribute")
// C++ program makes a multimap to store
// elements in descending order.
#include <bits/stdc++.h>
using namespace std;
  
int main()
{
  
    // Creating & Initializing a multimap 
    // of Ints & String
    multimap<int, std::string> mymap;
  
    // Inserting the elements one by one
    mymap.insert(make_pair(10, "geeks"));
    mymap.insert(make_pair(20, "practice"));
    mymap.insert(make_pair(5, "contribute"));
  
    // Duplicates allowed
    mymap.insert(make_pair(20, "van")); 
  
    mymap.insert(make_pair(20, "watch"));
    mymap.insert(make_pair(5, "joker"));
  
    for (auto it = mymap.rbegin(); it != mymap.rend(); it++) {
        cout << "(" << it->first << ", " 
            << it->second << ")" << endl;
    }
  
    return 0;
}
Producción:

(20, watch)
(20, van)
(20, practice)
(10, geeks)
(5, joker)
(5, contribute)

Publicación traducida automáticamente

Artículo escrito por Vishal Chaudhary 2 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *