Hoe de kaart te herhalen in C++

How Iterate Over Map C



In deze korte zelfstudie zullen we zien hoe u kunt herhalen in de kaart in C ++.

Er zijn meerdere manieren om de kaart in C++ te herhalen. Met nieuwere versies van C++ zijn er meer geavanceerde manieren om de kaart in C++ te herhalen.







Laten we ze stuk voor stuk doornemen.



For-lus gebruiken met stp::map

We hebben een kaart gemaakt met de naam |__+_| en voegde er sleutel-waardeparen aan toe.



<voor>
#erbij betrekken
#erbij betrekken
#erbij betrekken
#erbij betrekken
#erbij betrekken
gebruik makend van naamruimteuur;
inthoofd() {
// Initialiseer een kaart
kaart>'India','Delhi'));
landHoofdstadKaart.invoegen(paar-<touwtje, touwtje>('Nepal','Kathmandu'));
landHoofdstadKaart.invoegen(paar-<touwtje, touwtje>('China','Peking'));
landHoofdstadKaart.invoegen(paar-<touwtje, touwtje>('Frankrijk','Parijs'));

// Herhaal iterator in for loop
voor (autoitr=landHoofdstadKaart.beginnen();itr!=landHoofdstadKaart.einde();itr++)
{
uur::kosten <<itr->eerst// Toegangssleutel
<< ':'
<<itr->tweede// Toegangswaarde
<<uur::eindel;
}
opbrengst 0;
}
</voor>
Uitgang::
<voor>
China:Peking
Frankrijk:Parijs
India:Delhi
Nepal:Kathmandu
</voor>

Zoals u kunt zien, hebben we country:capital(key:value) afgedrukt met de for-lus.





Als je merkt dat we |__+_| . hebben gebruikt type specificatie voor kaart iterator vanwege de leesbaarheid. U kunt |__+_| . gebruiken ook expliciet.
Opmerking: Als u de uitvoer ziet, wordt deze in oplopende volgorde gesorteerd op sleutels. Dit komt omdat std::map een gesorteerde associatieve container is met de meegeleverde Comparator (versie C++11 en later). Omdat we geen comparator hebben geleverd, heeft C++ de standaard comparator voor string gebruikt.

While-lus gebruiken met stp::map

We kunnen ook een while-lus gebruiken in plaats van een for-lus.



<voor>
#erbij betrekken
#erbij betrekken
#erbij betrekken
#include >
gebruik makend van naamruimteuur;
inthoofd() {
// Initialiseer een kaart
kaart<touwtje, touwtje>landHoofdstadKaart;
// Voeg verschillende elementen in op de kaart
landHoofdstadKaart.invoegen(paar-<touwtje, touwtje>('India','Delhi'));
landHoofdstadKaart.invoegen(paar-<touwtje, touwtje>('Nepal','Kathmandu'));
landHoofdstadKaart.invoegen(paar-<touwtje, touwtje>('China','Peking'));
landHoofdstadKaart.invoegen(paar-<touwtje, touwtje>('Frankrijk','Parijs'));


// Maak een iterator voor de kaart en initialiseer met begin
autoitr=landHoofdstadKaart.beginnen();
// Herhaal iterator in while-lus
terwijl (itr!=landHoofdstadKaart.einde())
{
uur::kosten <<itr->eerst// Toegangssleutel
<< ':'
<<itr->tweede// Toegangswaarde
<<uur::eindel;
itr++;
}
opbrengst 0;
}
</voor>
Uitgang::
<voor>
China:Peking
Frankrijk:Parijs
India:Delhi
Nepal:Kathmandu
</voor>

Range based for loop gebruiken (C++11 versie en later)

Als u de C++11-versie gebruikt, is dit de meest elegante manier om de kaart in C++ te herhalen. U kunt traditionele, kubieke lussen vermijden en deze in plaats daarvan gebruiken.

<voor>
#erbij betrekken
#erbij betrekken
#erbij betrekken

gebruik makend van naamruimteuur;
inthoofd() {
// Initialiseer een kaart
kaart<touwtje, touwtje>landHoofdstadKaart;
// Voeg verschillende elementen in op de kaart
landHoofdstadKaart.invoegen(paar-<touwtje, touwtje>('India','Delhi'));
landHoofdstadKaart.invoegen(paar-<touwtje, touwtje>('Nepal','Kathmandu'));
landHoofdstadKaart.invoegen(paar-<touwtje, touwtje>('China','Peking'));
landHoofdstadKaart.invoegen(paar-<touwtje, touwtje>('Frankrijk','Parijs'));


// Herhaal iterator in for loop
voor (const auto &hij:landHoofdstadKaart) {
kosten <<hij.eerst << ':' <<hij.tweede<<'N';
}

opbrengst 0;
}
</voor>
Uitgang::
China:Peking
Frankrijk:Parijs
India:Delhi
Nepal:Kathmandu

Op bereik gebaseerde for-lus gebruiken met sleutel-waardenparen (C++17-versie en later)

Deze versie wordt ondersteund vanaf c++17 en biedt een flexibelere manier om over de kaart te itereren. U kunt expliciet toegang krijgen tot sleutel-waardenpaar in de kaart, wat een nog beter leesbare oplossing biedt.

<voor>
#erbij betrekken
#erbij betrekken
#erbij betrekken

gebruik makend van naamruimteuur;
inthoofd() {
// Initialiseer een kaart
kaart<touwtje, touwtje>landHoofdstadKaart;
// Voeg verschillende elementen in op de kaart
landHoofdstadKaart.invoegen(paar-<touwtje, touwtje>('India','Delhi'));
landHoofdstadKaart.invoegen(paar-<touwtje, touwtje>('Nepal','Kathmandu'));
landHoofdstadKaart.invoegen(paar-<touwtje, touwtje>('China','Peking'));
landHoofdstadKaart.invoegen(paar-<touwtje, touwtje>('Frankrijk','Parijs'));


// Herhaal iterator in for loop
voor (const auto& [sleutel waarde] :landHoofdstadKaart) {
kosten <<toets<< ':' <<waarde<< 'N';
}

opbrengst 0;
}
</voor>
Uitgang::
China:Peking
Frankrijk:Parijs
India:Delhi
Nepal:Kathmandu

Dat gaat allemaal over hoe je de kaart in C ++ kunt herhalen. Veel plezier met coderen!