Jak iterować po mapie w C++

How Iterate Over Map C



W tym krótkim samouczku zobaczymy, jak iterować po mapie w C++.

Istnieje wiele sposobów na iterację po mapie w C++. W nowszych wersjach C++ istnieją bardziej zaawansowane sposoby iteracji po mapie w C++.







Przyjrzyjmy się każdemu po kolei.



Używanie pętli for z stp::map

Stworzyliśmy mapę o nazwie |_+_| i wstawił do niego pary klucz-wartość.



<dla>
#włączać
#włączać
#włączać
#włączać
#włączać
za pomocą przestrzeń nazwgodziny;
intGłówny() {
// Zainicjuj mapę
mapa>'Indie','Delhi'));
krajKapitałMapa.wstawić(para<sznurek, sznurek>('Nepal',„Katmandu”));
krajKapitałMapa.wstawić(para<sznurek, sznurek>('Chiny','Pekin'));
krajKapitałMapa.wstawić(para<sznurek, sznurek>('Francja','Paryż'));

// Iteracja za pomocą iteratora w pętli for
dla (automatycznyitra=krajKapitałMapa.rozpocząć();itra!=krajKapitałMapa.kończyć się();itra++)
{
godziny::koszt <<itra->pierwszy// Klucz dostępu
<< ':'
<<itra->druga// Dostęp do wartości
<<godziny::koniec;
}
powrót 0;
}
</dla>
Wyjście:
<dla>
Chiny:Pekin
Francja:Paryż
Indie:Delhi
Nepal:Katmandu
</dla>

Jak widać, wypisaliśmy country:capital(klucz:wartość) za pomocą pętli for.





Jeśli zauważysz, użyliśmy |_+_| specyfikator typu dla iteratora mapy ze względu na czytelność. Możesz użyć |__+_| wyraźnie.
Notatka: Jeśli widzisz dane wyjściowe, są one posortowane według kluczy w kolejności rosnącej. Dzieje się tak, ponieważ std::map jest posortowanym kontenerem asocjacyjnym z dostarczonym Komparatorem (od wersji C++11). Ponieważ nie dostarczyliśmy żadnego komparatora, więc C++ użył domyślnego komparatora dla łańcucha.

Używanie pętli while z stp::map

Możemy również użyć pętli while zamiast pętli for.



<dla>
#włączać
#włączać
#włączać
#włącz >
za pomocą przestrzeń nazwgodziny;
intGłówny() {
// Zainicjuj mapę
mapa<sznurek, sznurek>krajKapitałMapa;
// Wstaw różne elementy na mapie
krajKapitałMapa.wstawić(para<sznurek, sznurek>('Indie','Delhi'));
krajKapitałMapa.wstawić(para<sznurek, sznurek>('Nepal',„Katmandu”));
krajKapitałMapa.wstawić(para<sznurek, sznurek>('Chiny','Pekin'));
krajKapitałMapa.wstawić(para<sznurek, sznurek>('Francja','Paryż'));


// Utwórz iterator dla mapy i zainicjuj za pomocą begin
automatycznyitra=krajKapitałMapa.rozpocząć();
// Iteracja za pomocą iteratora w pętli while
podczas (itra!=krajKapitałMapa.kończyć się())
{
godziny::koszt <<itra->pierwszy// Klucz dostępu
<< ':'
<<itra->druga// Dostęp do wartości
<<godziny::koniec;
itra++;
}
powrót 0;
}
</dla>
Wyjście:
<dla>
Chiny:Pekin
Francja:Paryż
Indie:Delhi
Nepal:Katmandu
</dla>

Korzystanie z zakresu opartego na pętli (od wersji C++11)

Jeśli używasz wersji C++11, to jest to najbardziej elegancki sposób na iterację po mapie w C++. Możesz uniknąć tradycyjnych pętli z kostką i użyć ich zamiast tego.

<dla>
#włączać
#włączać
#włączać

za pomocą przestrzeń nazwgodziny;
intGłówny() {
// Zainicjuj mapę
mapa<sznurek, sznurek>krajKapitałMapa;
// Wstaw różne elementy na mapie
krajKapitałMapa.wstawić(para<sznurek, sznurek>('Indie','Delhi'));
krajKapitałMapa.wstawić(para<sznurek, sznurek>('Nepal',„Katmandu”));
krajKapitałMapa.wstawić(para<sznurek, sznurek>('Chiny','Pekin'));
krajKapitałMapa.wstawić(para<sznurek, sznurek>('Francja','Paryż'));


// Iteracja za pomocą iteratora w pętli for
dla (stały automatyczny &on:krajKapitałMapa) {
koszt <<on.pierwszy << ':' <<on.druga<<' ';
}

powrót 0;
}
</dla>
Wyjście:
Chiny:Pekin
Francja:Paryż
Indie:Delhi
Nepal:Katmandu

Korzystanie z pętli for opartej na zakresie z parami klucz-wartość (od wersji C++ 17)

Ta wersja jest obsługiwana od c++17 i zapewnia bardziej elastyczny sposób iteracji po mapie. Możesz jawnie uzyskać dostęp do pary klucz-wartość na mapie, co zapewnia jeszcze bardziej czytelne rozwiązanie.

<dla>
#włączać
#włączać
#włączać

za pomocą przestrzeń nazwgodziny;
intGłówny() {
// Zainicjuj mapę
mapa<sznurek, sznurek>krajKapitałMapa;
// Wstaw różne elementy na mapie
krajKapitałMapa.wstawić(para<sznurek, sznurek>('Indie','Delhi'));
krajKapitałMapa.wstawić(para<sznurek, sznurek>('Nepal',„Katmandu”));
krajKapitałMapa.wstawić(para<sznurek, sznurek>('Chiny','Pekin'));
krajKapitałMapa.wstawić(para<sznurek, sznurek>('Francja','Paryż'));


// Iteracja za pomocą iteratora w pętli for
dla (stały automatyczny& [kluczowa wartość] :krajKapitałMapa) {
koszt <<klucz<< ':' <<wartość<< ' ';
}

powrót 0;
}
</dla>
Wyjście:
Chiny:Pekin
Francja:Paryż
Indie:Delhi
Nepal:Katmandu

To wszystko o tym, jak iterować po mapie w C++. Udanego kodowania!