Com iterar sobre el mapa en C ++

How Iterate Over Map C



En aquest tutorial ràpid, veurem com fer una iteració al mapa en C ++.

Hi ha diverses maneres d'iterar sobre el mapa a C ++. Amb les versions més recents de C ++, hi ha maneres més avançades d’iterar sobre el mapa a C ++.







Anem a través de cadascun per un.



Utilitzant bucle for amb stp :: map

Hem creat un mapa anomenat countryCapitalMap i hi van inserir parells clau-valor.



<per>
#incloure
#incloure
#incloure
#incloure
#incloure
utilitzant espai de nomshores;
intprincipal() {
// Inicialitzar un mapa
mapa>'Índia','Delhi'));
countryCapitalMap.inserir(parella<corda, corda>('Nepal','Katmandú'));
countryCapitalMap.inserir(parella<corda, corda>('China','Pequín'));
countryCapitalMap.inserir(parella<corda, corda>('França','París'));

// Iterar utilitzant l'iterador in for loop
per (automàticitr=countryCapitalMap.començar();itr!=countryCapitalMap.final();itr++)
{
hores::cost <<itr->primer// Clau d’accés
<< ':'
<<itr->segon// Valor d’accés
<<hores::endl;
}
tornar 0;
}
</per>
Sortida:
<per>
Xina:Pequín
França:París
Índia:Delhi
Nepal:Katmandú
</per>

Com podeu veure, hem imprès country: capital (clau: valor) utilitzant el bucle for.





Si ho observeu, hem utilitzat auto especificador de tipus per a l'iterador de mapes a causa de la llegibilitat. Podeu utilitzar map::iterator explícitament també.
Nota: Si veieu la sortida, s’ordena per claus en ordre ascendent. Això es deu al fet que std :: map és un contenidor associatiu ordenat amb el comparador subministrat (versió C ++ 11 en endavant). Com que no hem proporcionat cap comparador, C ++ ha utilitzat el comparador per defecte per a cadenes.

Utilitzant el bucle while amb stp :: map

També podem utilitzar un bucle while en lloc de for loop.



<per>
#incloure
#incloure
#incloure
#include>
utilitzant espai de nomshores;
intprincipal() {
// Inicialitzar un mapa
mapa<corda, corda>countryCapitalMap;
// Inseriu diferents elements al mapa
countryCapitalMap.inserir(parella<corda, corda>('Índia','Delhi'));
countryCapitalMap.inserir(parella<corda, corda>('Nepal','Katmandú'));
countryCapitalMap.inserir(parella<corda, corda>('China','Pequín'));
countryCapitalMap.inserir(parella<corda, corda>('França','París'));


// Creeu un iterador per al mapa i Inicialitzeu-ho amb begin
automàticitr=countryCapitalMap.començar();
// Iterar mitjançant l'iterador a bucle while
mentre (itr!=countryCapitalMap.final())
{
hores::cost <<itr->primer// Clau d’accés
<< ':'
<<itr->segon// Valor d’accés
<<hores::endl;
itr++;
}
tornar 0;
}
</per>
Sortida:
<per>
Xina:Pequín
França:París
Índia:Delhi
Nepal:Katmandú
</per>

Ús de Range based for loop (versió C ++ 11 en endavant)

Si utilitzeu la versió de C ++ 11, aquesta és la manera més elegant d’iterar sobre el mapa a C ++. Podeu evitar els bucles molestos tradicionals i utilitzar-los en el seu lloc.

<per>
#incloure
#incloure
#incloure

utilitzant espai de nomshores;
intprincipal() {
// Inicialitzar un mapa
mapa<corda, corda>countryCapitalMap;
// Inseriu diferents elements al mapa
countryCapitalMap.inserir(parella<corda, corda>('Índia','Delhi'));
countryCapitalMap.inserir(parella<corda, corda>('Nepal','Katmandú'));
countryCapitalMap.inserir(parella<corda, corda>('China','Pequín'));
countryCapitalMap.inserir(parella<corda, corda>('França','París'));


// Iterar utilitzant l'iterador in for loop
per (const automàtic &ell:countryCapitalMap) {
cost <<ell.primer << ':' <<ell.segon<<' n';
}

tornar 0;
}
</per>
Sortida:
Xina:Pequín
França:París
Índia:Delhi
Nepal:Katmandú

Ús de bucle basat en rang amb parells clau-valors (versió C ++ 17 en endavant)

Aquesta versió és compatible amb c ++ 17 en endavant i proporciona una manera més flexible d’iterar sobre el mapa. Podeu accedir explícitament al parell clau-valor al mapa, cosa que proporciona una solució encara més llegible.

<per>
#incloure
#incloure
#incloure

utilitzant espai de nomshores;
intprincipal() {
// Inicialitzar un mapa
mapa<corda, corda>countryCapitalMap;
// Inseriu diferents elements al mapa
countryCapitalMap.inserir(parella<corda, corda>('Índia','Delhi'));
countryCapitalMap.inserir(parella<corda, corda>('Nepal','Katmandú'));
countryCapitalMap.inserir(parella<corda, corda>('China','Pequín'));
countryCapitalMap.inserir(parella<corda, corda>('França','París'));


// Iterar utilitzant l'iterador in for loop
per (const automàtic& [clau, valor] :countryCapitalMap) {
cost <<clau<< ':' <<valor<< ' n';
}

tornar 0;
}
</per>
Sortida:
Xina:Pequín
França:París
Índia:Delhi
Nepal:Katmandú

Tot es tracta de com iterar el mapa en C ++. Feliç codificació!