Cómo iterar sobre el mapa en C ++

How Iterate Over Map C



En este tutorial rápido, veremos cómo iterar en el mapa en C ++.

Hay varias formas de iterar sobre el mapa en C ++. Con las versiones más recientes de C ++, existen formas más avanzadas de iterar sobre el mapa en C ++.







Repasemos cada uno por uno.



Usando for loop con stp :: map

Hemos creado un mapa llamado countryCapitalMap e insertó pares clave-valor.



<por>
#incluir
#incluir
#incluir
#incluir
#incluir
utilizando espacio de nombreshoras;
En tprincipal() {
// Inicializar un mapa
mapa>'India','Delhi'));
countryCapitalMap.insertar(par<cuerda, cuerda>('Nepal','Katmandú'));
countryCapitalMap.insertar(par<cuerda, cuerda>('China','Beijing'));
countryCapitalMap.insertar(par<cuerda, cuerda>('Francia','París'));

// Iterar usando el iterador en el bucle for
por (autoitr=countryCapitalMap.empezar();itr!=countryCapitalMap.fin();itr++)
{
horas::costo <<itr->primero// Llave de acceso
<< ':'
<<itr->segundo// Valor de acceso
<<horas::endl;
}
regreso 0;
}
</por>
Producción:
<por>
China:Beijing
Francia:París
India:Delhi
Nepal:Katmandú
</por>

Como puede ver, hemos impreso país: capital (clave: valor) usando el bucle for.





Si se da cuenta, hemos utilizado auto especificador de tipo para el iterador del mapa debido a la legibilidad. Puede utilizar map::iterator explícitamente también.
Nota: Si ve la salida, está ordenada por claves en orden ascendente. Esto se debe a que std :: map es un contenedor asociativo ordenado con Comparator suministrado (versión C ++ 11 en adelante). Dado que no proporcionamos ningún comparador, C ++ ha utilizado el Comparador predeterminado para la cadena.

Usando while loop con stp :: map

También podemos usar un ciclo while en lugar de un ciclo for.



<por>
#incluir
#incluir
#incluir
#include>
utilizando espacio de nombreshoras;
En tprincipal() {
// Inicializar un mapa
mapa<cuerda, cuerda>countryCapitalMap;
// Insertar diferentes elementos en el mapa
countryCapitalMap.insertar(par<cuerda, cuerda>('India','Delhi'));
countryCapitalMap.insertar(par<cuerda, cuerda>('Nepal','Katmandú'));
countryCapitalMap.insertar(par<cuerda, cuerda>('China','Beijing'));
countryCapitalMap.insertar(par<cuerda, cuerda>('Francia','París'));


// Crea un iterador para el mapa e Inicializa con begin
autoitr=countryCapitalMap.empezar();
// Iterar usando el iterador en el bucle while
tiempo (itr!=countryCapitalMap.fin())
{
horas::costo <<itr->primero// Llave de acceso
<< ':'
<<itr->segundo// Valor de acceso
<<horas::endl;
itr++;
}
regreso 0;
}
</por>
Producción:
<por>
China:Beijing
Francia:París
India:Delhi
Nepal:Katmandú
</por>

Uso de rango basado en bucle for (versión de C ++ 11 en adelante)

Si está utilizando la versión C ++ 11, esta es la forma más elegante de iterar sobre el mapa en C ++. Puede evitar los bucles cubersome tradicionales y usar esto en su lugar.

<por>
#incluir
#incluir
#incluir

utilizando espacio de nombreshoras;
En tprincipal() {
// Inicializar un mapa
mapa<cuerda, cuerda>countryCapitalMap;
// Insertar diferentes elementos en el mapa
countryCapitalMap.insertar(par<cuerda, cuerda>('India','Delhi'));
countryCapitalMap.insertar(par<cuerda, cuerda>('Nepal','Katmandú'));
countryCapitalMap.insertar(par<cuerda, cuerda>('China','Beijing'));
countryCapitalMap.insertar(par<cuerda, cuerda>('Francia','París'));


// Iterar usando el iterador en el bucle for
por (constante auto &él:countryCapitalMap) {
costo <<él.primero << ':' <<él.segundo<<' orte';
}

regreso 0;
}
</por>
Producción:
China:Beijing
Francia:París
India:Delhi
Nepal:Katmandú

Uso de bucle for basado en rango con pares clave-valor (versión C ++ 17 en adelante)

Esta versión es compatible desde c ++ 17 en adelante y proporciona una forma más flexible de iterar sobre el mapa. Puede acceder explícitamente al par clave-valor en el mapa, lo que proporciona una solución aún más legible.

<por>
#incluir
#incluir
#incluir

utilizando espacio de nombreshoras;
En tprincipal() {
// Inicializar un mapa
mapa<cuerda, cuerda>countryCapitalMap;
// Insertar diferentes elementos en el mapa
countryCapitalMap.insertar(par<cuerda, cuerda>('India','Delhi'));
countryCapitalMap.insertar(par<cuerda, cuerda>('Nepal','Katmandú'));
countryCapitalMap.insertar(par<cuerda, cuerda>('China','Beijing'));
countryCapitalMap.insertar(par<cuerda, cuerda>('Francia','París'));


// Iterar usando el iterador en el bucle for
por (constante auto& [valor clave] :countryCapitalMap) {
costo <<llave<< ':' <<valor<< ' orte';
}

regreso 0;
}
</por>
Producción:
China:Beijing
Francia:París
India:Delhi
Nepal:Katmandú

Se trata de cómo iterar sobre el mapa en C ++. ¡Feliz codificación!