Hvordan iterere over kartet i C ++

How Iterate Over Map C



I denne raske opplæringen vil vi se hvordan du gjentar kartet i C ++.

Det er flere måter å gjenta på kartet i C ++. Med nyere versjoner av C ++ er det mer avanserte måter å iterere over kartet i C ++.







La oss gå gjennom hver og en.



Bruker for loop med stp :: map

Vi har laget et kart som heter | _+_ | og satte inn nøkkelverdi-par til den.



<til>
#inkludere
#inkludere
#inkludere
#inkludere
#inkludere
ved hjelp av navneområdetimer;
inthoved-() {
// Initialiser et kart
kart>'India','Delhi'));
countryCapitalMap.sett inn(par<streng, streng>('Nepal','Katmandu'));
countryCapitalMap.sett inn(par<streng, streng>('Kina','Beijing'));
countryCapitalMap.sett inn(par<streng, streng>('Frankrike','Paris'));

// Iterer ved hjelp av iterator i for loop
til (autoitr=countryCapitalMap.begynne();itr!=countryCapitalMap.slutt();itr++)
{
timer::koste <<itr->først// Tilgangsnøkkel
<< ':'
<<itr->sekund// Tilgangsverdi
<<timer::endl;
}
komme tilbake 0;
}
</til>
Produksjon:
<til>
Kina:Beijing
Frankrike:Paris
India:Delhi
Nepal:Katmandu
</til>

Som du kan se, har vi skrevet ut country: capital (nøkkel: verdi) ved hjelp av loop.





Hvis du merker det, har vi brukt | _+_ | type spesifiserer for kart iterator på grunn av lesbarhet. Du kan bruke | _+_ | eksplisitt også.
Merk: Hvis du ser utgangen, blir den sortert etter nøkler i stigende rekkefølge. Dette er fordi std :: map er en sortert assosiativ beholder med medfølgende Comparator (versjon C ++ 11 og utover). Siden vi ikke ga noen komparator, så har C ++ brukt standardkomparatoren for streng.

Bruker mens loop med stp :: map

Vi kan også bruke en while -loop i stedet for for loop.



<til>
#inkludere
#inkludere
#inkludere
#include>
ved hjelp av navneområdetimer;
inthoved-() {
// Initialiser et kart
kart<streng, streng>countryCapitalMap;
// Sett inn forskjellige elementer i kartet
countryCapitalMap.sett inn(par<streng, streng>('India','Delhi'));
countryCapitalMap.sett inn(par<streng, streng>('Nepal','Katmandu'));
countryCapitalMap.sett inn(par<streng, streng>('Kina','Beijing'));
countryCapitalMap.sett inn(par<streng, streng>('Frankrike','Paris'));


// Lag en iterator for kartet og initialiser med start
autoitr=countryCapitalMap.begynne();
// Iterer ved å bruke iterator i mens loop
samtidig som (itr!=countryCapitalMap.slutt())
{
timer::koste <<itr->først// Tilgangsnøkkel
<< ':'
<<itr->sekund// Tilgangsverdi
<<timer::endl;
itr++;
}
komme tilbake 0;
}
</til>
Produksjon:
<til>
Kina:Beijing
Frankrike:Paris
India:Delhi
Nepal:Katmandu
</til>

Bruker Range based for loop (C ++ 11 versjon og fremover)

Hvis du bruker C ++ 11 -versjonen, er dette den mest elegante måten å gjenta over kart i C ++. Du kan unngå tradisjonelle cubersome sløyfer og bruke denne i stedet.

<til>
#inkludere
#inkludere
#inkludere

ved hjelp av navneområdetimer;
inthoved-() {
// Initialiser et kart
kart<streng, streng>countryCapitalMap;
// Sett inn forskjellige elementer i kartet
countryCapitalMap.sett inn(par<streng, streng>('India','Delhi'));
countryCapitalMap.sett inn(par<streng, streng>('Nepal','Katmandu'));
countryCapitalMap.sett inn(par<streng, streng>('Kina','Beijing'));
countryCapitalMap.sett inn(par<streng, streng>('Frankrike','Paris'));


// Iterer ved hjelp av iterator i for loop
til (konst auto &han:countryCapitalMap) {
koste <<han.først << ':' <<han.sekund<<' n';
}

komme tilbake 0;
}
</til>
Produksjon:
Kina:Beijing
Frankrike:Paris
India:Delhi
Nepal:Katmandu

Bruke områdebasert for loop med nøkkel-verdipar (C ++ 17 versjon og fremover)

Denne versjonen støttes fra c ++ 17 og utover og gir en mer fleksibel måte for iterasjon over kartet. Du kan eksplisitt få tilgang til nøkkel-verdipar på kartet som gir enda mer lesbar løsning.

<til>
#inkludere
#inkludere
#inkludere

ved hjelp av navneområdetimer;
inthoved-() {
// Initialiser et kart
kart<streng, streng>countryCapitalMap;
// Sett inn forskjellige elementer i kartet
countryCapitalMap.sett inn(par<streng, streng>('India','Delhi'));
countryCapitalMap.sett inn(par<streng, streng>('Nepal','Katmandu'));
countryCapitalMap.sett inn(par<streng, streng>('Kina','Beijing'));
countryCapitalMap.sett inn(par<streng, streng>('Frankrike','Paris'));


// Iterer ved hjelp av iterator i for loop
til (konst auto& [nøkkel, verdi] :countryCapitalMap) {
koste <<nøkkel<< ':' <<verdi<< ' n';
}

komme tilbake 0;
}
</til>
Produksjon:
Kina:Beijing
Frankrike:Paris
India:Delhi
Nepal:Katmandu

Det handler om hvordan du gjentar over kartet i C ++. God koding!