Recorriendo un mapa (o unordered_map) en C++ STL

Podemos atravesar map y unordered_map usando las siguientes formas diferentes.
 

Usando un rango basado en bucle

map

// CPP program to traverse a map using range
// based for loop
#include <bits/stdc++.h>
using namespace std;
 
int main()
{
    int arr[] = { 1, 1, 2, 1, 1, 3, 4, 3 };
    int n = sizeof(arr) / sizeof(arr[0]);
 
    map<int, int> m;
    for (int i = 0; i < n; i++)
        m[arr[i]]++;
 
    cout << "Element  Frequency" << endl;
    for (auto i : m)
        cout << i.first << "   " << i.second
             << endl;
 
    return 0;
}

unordered_map

// CPP program to traverse a unordered_map using
// range based for loop
#include <bits/stdc++.h>
using namespace std;
 
int main()
{
    int arr[] = { 1, 1, 2, 1, 1, 3, 4, 3 };
    int n = sizeof(arr) / sizeof(arr[0]);
 
    unordered_map<int, int> m;
    for (int i = 0; i < n; i++)
        m[arr[i]]++;
 
    cout << "Element Frequency" << endl;
    for (auto i : m)
        cout << i.first << "    " << i.second
             << endl;
 
    return 0;
}
Producción

Element  Frequency
1   4
2   1
3   2
4   1

Salida [NOTA: para unordered_map, las filas de salida pueden estar 
en cualquier orden] 

Atravesar usando begin() y end()

map

// CPP program to traverse a map using iterators
#include <bits/stdc++.h>
using namespace std;
 
int main()
{
    int arr[] = { 1, 1, 2, 1, 1, 3, 4, 3 };
    int n = sizeof(arr) / sizeof(arr[0]);
 
    map<int, int> m;
    for (int i = 0; i < n; i++)
        m[arr[i]]++;
 
    cout << " Element Frequency" << endl;
    for (auto i = m.begin(); i != m.end(); i++)
        cout << i->first << "      " << i->second
             << endl;
 
    return 0;
}

unordered_map

// CPP program to traverse a unordered_map
// using iterators
#include <bits/stdc++.h>
using namespace std;
 
int main()
{
    int arr[] = { 1, 1, 2, 1, 1, 3, 4, 3 };
    int n = sizeof(arr) / sizeof(arr[0]);
 
    unordered_map<int, int> m;
    for (int i = 0; i < n; i++)
        m[arr[i]]++;
 
    cout << " Element Frequency" << endl;
    for (auto i = m.begin(); i != m.end(); i++)
        cout << i->first << "       " << i->second
             << endl;
 
    return 0;
}
Producción

 Element Frequency
1      4
2      1
3      2
4      1

Salida [NOTA: para unordered_map, las filas de salida pueden estar 
en cualquier orden] 
 

Iterando sobre un mapa usando STL Iterator:

Al crear un iterador de std::map e inicializarlo al inicio del mapa y visitar hasta el final del mapa, podemos iterar con éxito sobre todos los elementos del mapa.

Entonces, veamos el siguiente programa para saber cómo hacerlo.

C++

#include <iostream>
#include <map>
#include <string>
#include <iterator>
#include <algorithm>
 
int main()
{
    // Map created
    std::map<std::string, int> ExampleMap;
     
    // elements are inserted into map
    ExampleMap.insert(std::pair<std::string, int>("Sunday", 1));
    ExampleMap.insert(std::pair<std::string, int>("Monday", 2));
    ExampleMap.insert(std::pair<std::string, int>("Tuesday", 3));
    ExampleMap.insert(std::pair<std::string, int>("Wednesday", 4));
    ExampleMap.insert(std::pair<std::string, int>("Thursday", 5));
    ExampleMap.insert(std::pair<std::string, int>("Friday", 6));
    ExampleMap.insert(std::pair<std::string, int>("Saturday", 7));
     
    // map iterator created
    // iterator pointing to start of map
    std::map<std::string, int>::iterator it = ExampleMap.begin();
     
    // Iterating over the map using Iterator till map end.
    while (it != ExampleMap.end())
    {
        // Accessing the key
        std::string word = it->first;
        // Accessing the value
        int count = it->second;
        std::cout << word << " :: " << count << std::endl;
        // iterator incremented to point next item
        it++;
    }
    return 0;
}
Producción

Friday::6
Monday::2
Saturday::7
Sunday::1
Thursday::5
Tuesday::3
Wednesday::4

Iterando sobre un mapa usando std::for_each y la función lambda:

Al usar std::for y la función lambda, podemos iterar con éxito sobre todos los elementos del mapa.

Donde la función lambda se utilizará como función de devolución de llamada y recibirá cada entrada del mapa.

Entonces, veamos el siguiente programa para saber cómo hacerlo.

C++

#include <iostream>
#include <map>
#include <string>
#include <iterator>
#include <algorithm>
 
int main()
{
    // Map created
    std::map<std::string, int> ExampleMap;
     
    // elements are inserted into map
    ExampleMap.insert(std::pair<std::string, int>("Sunday", 1));
    ExampleMap.insert(std::pair<std::string, int>("Monday", 2));
    ExampleMap.insert(std::pair<std::string, int>("Tuesday", 3));
    ExampleMap.insert(std::pair<std::string, int>("Wednesday", 4));
    ExampleMap.insert(std::pair<std::string, int>("Thursday", 5));
    ExampleMap.insert(std::pair<std::string, int>("Friday", 6));
    ExampleMap.insert(std::pair<std::string, int>("Saturday", 7));
     
    // map iterator created
    // iterator pointing to start of map
    std::map<std::string, int>::iterator it = ExampleMap.begin();
     
    // Iterating over the map till map end.
        std::for_each(ExampleMap.begin(), ExampleMap.end(),
                [](std::pair<std::string, int> key_value)
                {
                    // Accessing the key
                    std::string word = key_value.first;
                    // Accessing the value
                    int count = key_value.second;
                    std::cout<<word<<" :: "<<count<<std::endl;
        });
    return 0;
}
Producción

Friday::6
Monday::2
Saturday::7
Sunday::1
Thursday::5
Tuesday::3
Wednesday::4

Este artículo es una contribución de Kartik . Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.org o enviar tu artículo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.
Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.
 

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 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 *