Hur man itererar över kartan i C ++

How Iterate Over Map C



I denna snabba handledning kommer vi att se hur det går igen på kartan i C ++.

Det finns flera sätt att iterera över kartan i C ++. Med nyare versioner av C ++ finns det mer avancerade sätt att iterera över kartan i C ++.







Låt oss gå igenom var och en.



Använd för for loop med stp :: map

Vi har skapat en karta med namnet | _+_ | och infogade nyckel-värdepar till den.



<för>
#omfatta
#omfatta
#omfatta
#omfatta
#omfatta
använder sig av namnrymdtimmar;
inthuvud() {
// Initiera en karta
Karta>'Indien','Delhi'));
countryCapitalMap.Föra in(par<sträng, sträng>('Nepal','Katmandu'));
countryCapitalMap.Föra in(par<sträng, sträng>('Kina','Peking'));
countryCapitalMap.Föra in(par<sträng, sträng>('Frankrike','Paris'));

// Iterera med iterator in for loop
för (bilitr=countryCapitalMap.Börja();itr!=countryCapitalMap.slutet();itr++)
{
timmar::kosta <<itr->först// Åtkomstnyckel
<< ':'
<<itr->andra// Åtkomstvärde
<<timmar::endl;
}
lämna tillbaka 0;
}
</för>
Produktion:
<för>
Kina:Peking
Frankrike:Paris
Indien:Delhi
Nepal:Katmandu
</för>

Som du kan se har vi tryckt land: kapital (nyckel: värde) med hjälp av loop.





Om du märker det har vi använt | _+_ | typspecifikator för map iterator på grund av läsbarhet. Du kan använda | _+_ | uttryckligen också.
Notera: Om du ser utdata sorteras den efter nycklar i stigande ordning. Detta beror på att std :: map är en sorterad associativ behållare med levererad Comparator (version C ++ 11 och framåt). Eftersom vi inte gav någon komparator, så har C ++ använt standardkomparatorn för sträng.

Använda while loop med stp :: map

Vi kan också använda en stund -loop istället för för loop.



<för>
#omfatta
#omfatta
#omfatta
#inkludera>
använder sig av namnrymdtimmar;
inthuvud() {
// Initiera en karta
Karta<sträng, sträng>countryCapitalMap;
// Infoga olika element i kartan
countryCapitalMap.Föra in(par<sträng, sträng>('Indien','Delhi'));
countryCapitalMap.Föra in(par<sträng, sträng>('Nepal','Katmandu'));
countryCapitalMap.Föra in(par<sträng, sträng>('Kina','Peking'));
countryCapitalMap.Föra in(par<sträng, sträng>('Frankrike','Paris'));


// Skapa en iterator för kartan och initiera med start
bilitr=countryCapitalMap.Börja();
// Iterera med iterator i medan loop
medan (itr!=countryCapitalMap.slutet())
{
timmar::kosta <<itr->först// Åtkomstnyckel
<< ':'
<<itr->andra// Åtkomstvärde
<<timmar::endl;
itr++;
}
lämna tillbaka 0;
}
</för>
Produktion:
<för>
Kina:Peking
Frankrike:Paris
Indien:Delhi
Nepal:Katmandu
</för>

Använda Range based for loop (C ++ 11 version och framåt)

Om du använder C ++ 11 -versionen är det här det mest eleganta sättet att iterera över kartan i C ++. Du kan undvika traditionella cubersome loopar och använda detta istället.

<för>
#omfatta
#omfatta
#omfatta

använder sig av namnrymdtimmar;
inthuvud() {
// Initiera en karta
Karta<sträng, sträng>countryCapitalMap;
// Infoga olika element i kartan
countryCapitalMap.Föra in(par<sträng, sträng>('Indien','Delhi'));
countryCapitalMap.Föra in(par<sträng, sträng>('Nepal','Katmandu'));
countryCapitalMap.Föra in(par<sträng, sträng>('Kina','Peking'));
countryCapitalMap.Föra in(par<sträng, sträng>('Frankrike','Paris'));


// Iterera med iterator in for loop
för (konst bil &han:countryCapitalMap) {
kosta <<han.först << ':' <<han.andra<<' n';
}

lämna tillbaka 0;
}
</för>
Produktion:
Kina:Peking
Frankrike:Paris
Indien:Delhi
Nepal:Katmandu

Använda intervallbaserad för loop med nyckel-värdepar (C ++ 17 version och framåt)

Denna version stöds från c ++ 17 och framåt och ger ett mer flexibelt sätt att iterera över kartan. Du kan uttryckligen komma åt nyckel-värdepar i kartan som ger ännu mer läsbar lösning.

<för>
#omfatta
#omfatta
#omfatta

använder sig av namnrymdtimmar;
inthuvud() {
// Initiera en karta
Karta<sträng, sträng>countryCapitalMap;
// Infoga olika element i kartan
countryCapitalMap.Föra in(par<sträng, sträng>('Indien','Delhi'));
countryCapitalMap.Föra in(par<sträng, sträng>('Nepal','Katmandu'));
countryCapitalMap.Föra in(par<sträng, sträng>('Kina','Peking'));
countryCapitalMap.Föra in(par<sträng, sträng>('Frankrike','Paris'));


// Iterera med iterator in for loop
för (konst bil& [nyckelvärde] :countryCapitalMap) {
kosta <<nyckel-<< ':' <<värde<< ' n';
}

lämna tillbaka 0;
}
</för>
Produktion:
Kina:Peking
Frankrike:Paris
Indien:Delhi
Nepal:Katmandu

Det handlar om hur man itererar över kartan i C ++. Glad kodning!