Kuidas kaardil C ++ iteratsiooni teha

How Iterate Over Map C

Selles kiirõpetuses näeme, kuidas C ++ kaardil itereerida.

Kaardil C ++ on mitu võimalust iteratsiooniks. Uuemate C ++ versioonide puhul on C ++ -is kaardi kordamiseks rohkem arenenud viise.



Käime igaüks ükshaaval läbi.



Kasutamine silmusena koos stp :: kaardiga

Oleme loonud kaardi nimega | _+_ | ja sisestas sellele võtme-väärtuse paarid.



<eest>
#kaasake
#kaasake
#kaasake
#kaasake
#kaasake
kasutades nimeruumtundi;
intpeamine() {
// Kaardi lähtestamine
kaart>'India','Delhi'));
countryCapitalMap.sisestada(paar<string, string>('Nepal','Katmandu'));
countryCapitalMap.sisestada(paar<string, string>('Hiina','Peking'));
countryCapitalMap.sisestada(paar<string, string>('Prantsusmaa','Pariis'));

// Korda, kasutades iteraatorit silmuse jaoks
eest (autoitr=countryCapitalMap.alustada();itr!=countryCapitalMap.lõpp();itr++)
{
tundi::maksma <<itr->esimene// Pääsuklahv
<< ':'
<<itr->teine// Juurdepääsu väärtus
<<tundi::endl;
}
tagasi 0;
}
</eest>
Väljund:
<eest>
Hiina:Peking
Prantsusmaa:Pariis
India:Delhi
Nepal:Katmandu
</eest>

Nagu näete, oleme trükkinud riigi: kapitali (võti: väärtus) silmusena.

Kui märkate, oleme kasutanud | _+_ | loetavuse tõttu kaardi iteraatori tüübispetsiif. Saate kasutada | _+_ | samuti selgesõnaliselt.
Märge: Kui näete väljundit, sorteeritakse see võtmete järgi kasvavas järjekorras. Seda seetõttu, et std :: map on sorteeritud assotsiatsioonikonteiner koos kaasasoleva võrdlusprogrammiga (versioon C ++ 11). Kuna me ei pakkunud võrdlusvahendit, kasutas C ++ stringi jaoks vaikimisi võrdlejat.

Funktsiooni while loop kasutamine koos stp :: mapiga

Võime silmuse asemel kasutada ka while -tsüklit.



<eest>
#kaasake
#kaasake
#kaasake
#kaasake>
kasutades nimeruumtundi;
intpeamine() {
// Kaardi lähtestamine
kaart<string, string>countryCapitalMap;
// Erinevate elementide sisestamine kaardile
countryCapitalMap.sisestada(paar<string, string>('India','Delhi'));
countryCapitalMap.sisestada(paar<string, string>('Nepal','Katmandu'));
countryCapitalMap.sisestada(paar<string, string>('Hiina','Peking'));
countryCapitalMap.sisestada(paar<string, string>('Prantsusmaa','Pariis'));


// Loo kaardile iteraator ja initsialiseeri algus
autoitr=countryCapitalMap.alustada();
// Iterate kasutades iteraatorit in loop
samas (itr!=countryCapitalMap.lõpp())
{
tundi::maksma <<itr->esimene// Pääsuklahv
<< ':'
<<itr->teine// Juurdepääsu väärtus
<<tundi::endl;
itr++;
}
tagasi 0;
}
</eest>
Väljund:
<eest>
Hiina:Peking
Prantsusmaa:Pariis
India:Delhi
Nepal:Katmandu
</eest>

Ahelapõhise vahemiku kasutamine (C ++ 11 versioon alates)

Kui kasutate versiooni C ++ 11, siis on see kõige elegantsem viis C ++ kaardil itereerimiseks. Saate vältida traditsioonilisi kubemesilmuseid ja kasutada seda selle asemel.

<eest>
#kaasake
#kaasake
#kaasake

kasutades nimeruumtundi;
intpeamine() {
// Kaardi lähtestamine
kaart<string, string>countryCapitalMap;
// Erinevate elementide sisestamine kaardile
countryCapitalMap.sisestada(paar<string, string>('India','Delhi'));
countryCapitalMap.sisestada(paar<string, string>('Nepal','Katmandu'));
countryCapitalMap.sisestada(paar<string, string>('Hiina','Peking'));
countryCapitalMap.sisestada(paar<string, string>('Prantsusmaa','Pariis'));


// Korda, kasutades iteraatorit silmuse jaoks
eest (const auto &tema:countryCapitalMap) {
maksma <<tema.esimene << ':' <<tema.teine<<' n';
}

tagasi 0;
}
</eest>
Väljund:
Hiina:Peking
Prantsusmaa:Pariis
India:Delhi
Nepal:Katmandu

Vahemikupõhise kasutamine tsüklil võtmeväärtuste paaridega (C ++ 17 versioon alates)

Seda versiooni toetatakse alates c ++ 17 ja see pakub paindlikumat viisi kaardil itereerimiseks. Saate selgesõnaliselt juurde pääseda võtmeväärtuste paarile kaardil, mis pakub veelgi loetavamat lahendust.

<eest>
#kaasake
#kaasake
#kaasake

kasutades nimeruumtundi;
intpeamine() {
// Kaardi lähtestamine
kaart<string, string>countryCapitalMap;
// Erinevate elementide sisestamine kaardile
countryCapitalMap.sisestada(paar<string, string>('India','Delhi'));
countryCapitalMap.sisestada(paar<string, string>('Nepal','Katmandu'));
countryCapitalMap.sisestada(paar<string, string>('Hiina','Peking'));
countryCapitalMap.sisestada(paar<string, string>('Prantsusmaa','Pariis'));


// Korda, kasutades iteraatorit silmuse jaoks
eest (const auto& [võti, väärtus] :countryCapitalMap) {
maksma <<võti<< ':' <<väärtus<< ' n';
}

tagasi 0;
}
</eest>
Väljund:
Hiina:Peking
Prantsusmaa:Pariis
India:Delhi
Nepal:Katmandu

See on kõik sellest, kuidas C ++ kaardil üle itereerida. Head kodeerimist!