Cum să iterați pe hartă în C ++

How Iterate Over Map C



În acest tutorial rapid, vom vedea cum să iterați în hartă în C ++.

Există mai multe moduri de a itera peste hartă în C ++. Cu versiunile mai noi de C ++, există modalități mai avansate de a itera peste hartă în C ++.







Să parcurgem fiecare câte unul.



Folosind bucla for cu stp :: map

Am creat o hartă numită countryCapitalMap și i-au inserat perechi cheie-valoare.



<pentru>
#include
#include
#include
#include
#include
folosind spațiu de numeore;
intprincipal() {
// Inițializați o hartă
Hartă>'India',„Delhi”));
countryCapitalMap.introduce(pereche<șir, șir>('Nepal',„Kathmandu”));
countryCapitalMap.introduce(pereche<șir, șir>('China','Beijing'));
countryCapitalMap.introduce(pereche<șir, șir>('Franţa','Paris'));

// Iterează folosind iteratorul în buclă
pentru (autoitr=countryCapitalMap.începe();itr!=countryCapitalMap.Sfârșit();itr++)
{
ore::cost <<itr->primul// Cheie de acces
<< ':'
<<itr->al doilea// Valoare de acces
<<ore::endl;
}
întoarcere 0;
}
</pentru>
Ieșire:
<pentru>
China:Beijing
Franţa:Paris
India:Delhi
Nepal:Kathmandu
</pentru>

După cum puteți vedea, am imprimat țara: capital (cheie: valoare) folosind bucla pentru.





Dacă observați, am folosit auto specificatorul de tip pentru iteratorul hărții din cauza lizibilității. Puteți utiliza map::iterator în mod explicit, de asemenea.
Notă: Dacă vedeți rezultatul, acesta este sortat după taste în ordine crescătoare. Acest lucru se datorează faptului că std :: map este un container asociativ sortat cu Comparator furnizat (versiunea C ++ 11 în continuare). Deoarece nu am furnizat niciun comparator, deci C ++ a folosit comparatorul implicit pentru șir.

Folosind bucla while cu stp :: map

De asemenea, putem folosi o buclă while în loc de buclă.



<pentru>
#include
#include
#include
#include>
folosind spațiu de numeore;
intprincipal() {
// Inițializați o hartă
Hartă<șir, șir>countryCapitalMap;
// Introduceți diferite elemente în hartă
countryCapitalMap.introduce(pereche<șir, șir>('India',„Delhi”));
countryCapitalMap.introduce(pereche<șir, șir>('Nepal',„Kathmandu”));
countryCapitalMap.introduce(pereche<șir, șir>('China','Beijing'));
countryCapitalMap.introduce(pereche<șir, șir>('Franţa','Paris'));


// Creați un iterator pentru hartă și inițializați cu begin
autoitr=countryCapitalMap.începe();
// Iterează folosind iteratorul în bucla while
in timp ce (itr!=countryCapitalMap.Sfârșit())
{
ore::cost <<itr->primul// Cheie de acces
<< ':'
<<itr->al doilea// Valoare de acces
<<ore::endl;
itr++;
}
întoarcere 0;
}
</pentru>
Ieșire:
<pentru>
China:Beijing
Franţa:Paris
India:Delhi
Nepal:Kathmandu
</pentru>

Utilizarea Range based pentru buclă (versiunea C ++ 11 în continuare)

Dacă utilizați versiunea C ++ 11, atunci acesta este cel mai elegant mod de a itera peste hartă în C ++. Puteți evita buclele tradiționale deranjante și le puteți folosi în schimb.

<pentru>
#include
#include
#include

folosind spațiu de numeore;
intprincipal() {
// Inițializați o hartă
Hartă<șir, șir>countryCapitalMap;
// Introduceți diferite elemente în hartă
countryCapitalMap.introduce(pereche<șir, șir>('India',„Delhi”));
countryCapitalMap.introduce(pereche<șir, șir>('Nepal',„Kathmandu”));
countryCapitalMap.introduce(pereche<șir, șir>('China','Beijing'));
countryCapitalMap.introduce(pereche<șir, șir>('Franţa','Paris'));


// Iterează folosind iteratorul în buclă
pentru (const auto &el:countryCapitalMap) {
cost <<el.primul << ':' <<el.al doilea<<' n';
}

întoarcere 0;
}
</pentru>
Ieșire:
China:Beijing
Franţa:Paris
India:Delhi
Nepal:Kathmandu

Folosirea intervalului pentru bucla cu perechi cheie-valoare (versiunea C ++ 17 în continuare)

Această versiune este acceptată începând cu c ++ 17 și oferă o modalitate mai flexibilă de iterare pe hartă. Puteți accesa în mod explicit perechea cheie-valoare pe hartă, care oferă o soluție și mai lizibilă.

<pentru>
#include
#include
#include

folosind spațiu de numeore;
intprincipal() {
// Inițializați o hartă
Hartă<șir, șir>countryCapitalMap;
// Introduceți diferite elemente în hartă
countryCapitalMap.introduce(pereche<șir, șir>('India',„Delhi”));
countryCapitalMap.introduce(pereche<șir, șir>('Nepal',„Kathmandu”));
countryCapitalMap.introduce(pereche<șir, șir>('China','Beijing'));
countryCapitalMap.introduce(pereche<șir, șir>('Franţa','Paris'));


// Iterează folosind iteratorul în buclă
pentru (const auto& [valoare cheie] :countryCapitalMap) {
cost <<cheie<< ':' <<valoare<< ' n';
}

întoarcere 0;
}
</pentru>
Ieșire:
China:Beijing
Franţa:Paris
India:Delhi
Nepal:Kathmandu

Este vorba despre cum să iterați pe hartă în C ++. Codificare fericită!