Zemljevid v knjižnici standardnih predlog C ++ (STL) s primerom

Kazalo:

Anonim

Kaj je std :: map?

V C ++ je MAP asociativni vsebnik, ki hrani predmete v preslikani obliki. Vsak element na zemljevidu je sestavljen iz vrednosti ključ-vrednost in preslikane vrednosti. Dve preslikani vrednosti ne moreta deliti enakih vrednosti ključev.

Ključne vrednosti so dobre za enolično razvrščanje in prepoznavanje elementov. Preslikane vrednosti so za shranjevanje vsebine, povezane s ključem. Oba se lahko razlikujeta po tipih, vendar jih tip člana kombinira prek parnega tipa, ki združuje oba.

V tej vadnici C ++ boste izvedeli:

  • Kaj je std :: map?
  • Zakaj uporabljati std :: map?
  • Sintaksa:
  • Vrste članov:
  • Vgrajene funkcije
  • Ponavljanje elementov zemljevida
  • Vstavljanje podatkov v std :: map:
  • Iskanje po zemljevidu
  • Brisanje podatkov z zemljevida

Zakaj uporabljati std :: map?

Tu so razlogi za uporabo zemljevida:

  • std :: map hrani edinstvene ključe samo v razvrščenem vrstnem redu na podlagi izbranih meril za razvrščanje.
  • Iskanje elementov s ključem je enostavno in hitrejše.
  • Vsakemu ključu je pritrjen samo en element.
  • std :: map se lahko uporablja kot asociativno polje.
  • std :: map je izvedljiv z uporabo binarnih dreves (uravnoteženo).

Sintaksa:

Če želite razglasiti std :: map, uporabite to sintakso:

std::mapmap_name;
  • Tip_datoteke označuje vrsto podatkov ključev zemljevida.
  • Vrednost_datatip označuje podatkovni tip vrednosti, ki ustreza ključem zemljevida.
  • Ime_karte je ime zemljevida.

Na primer:

map my_map;

Razglasili smo zemljevid z imenom my_map. Zemljevid bo imel niz kot ključne podatkovne tipe in celo število kot podatkovni tip vrednosti .

Vrste članov:

Funkcije članov lahko uporabljajo naslednje vrste članov kot parametre ali vrnitev:

  • key_type: Ključ (prvi parameter v predlogi)
  • mapped_type: T (drugi parameter v predlogi)
  • key_compare: Primerjaj (tretji parameter v predlogi)
  • allocator_type: Alloc (četrti parameter v predlogi)
  • value_type: par
  • value_compare: Vgnezden funkcijski razred za primerjavo elementov
  • reference: allocator_type :: reference
  • const_reference: dodelitev_tipa :: const_reference
  • kazalec: allocator_type :: kazalec
  • const_pointer: dodeljevalec_tipa :: const_pointer
  • iterator: dvosmerni iterator na value_type
  • const_iterator: dvosmerni iterator za const value_type
  • reverse_iterator: obratni iterator
  • const_reverse_iterator: konstanten povratni iterator
  • tip_razlike : ptrdiff_t
  • velikost_vrste: velikost_t

Vgrajene funkcije

std :: map ima vgrajene funkcije. Nekateri med njimi vključujejo:

  • begin () - Ta funkcija vrne iterator na prvi element zemljevida.
  • size () - Ta funkcija vrne število elementov na zemljevidu.
  • empty () - Ta funkcija vrne logično vrednost, ki označuje, ali je zemljevid prazen.
  • vstavi (par (ključ, vrednost)) - Ta funkcija vstavi nov par ključ-vrednost na zemljevid.
  • find (val) - Ta funkcija daje iterator elementu val, če ga najde. V nasprotnem primeru bo vrnil m.end ().
  • Izbriši (položaj iteratorja) - s to funkcijo se element izbriše na položaju, ki ga kaže iterator.
  • brisanje (const g) - Ta funkcija izbriše ključ-vrednost g z zemljevida.
  • Clear () - Ta funkcija izbriše vse elemente z zemljevida.

Ponavljanje elementov zemljevida

Lahko pregledujete elemente zemljevida. Preprosto moramo ustvariti iterator in ga uporabiti za to. Na primer:

Primer 1:

#include #include #include using namespace std;int main() {map Students;Students.insert(std::pair(200, "Alice"));Students.insert(std::pair(201, "John"));cout << "Map size is: " << Students.size() << endl;cout << endl << "Default map Order is: " << endl;for (map::iterator it = Students.begin(); it != Students.end(); ++it) {cout << (*it).first << ": " << (*it).second << endl;}}

Izhod:

Tu je posnetek zaslona kode:

Razlaga kode:

  1. V našo kodo vključite glavo glave iostream, da boste lahko uporabljali njene funkcije.
  2. Datoteko z glavo niza vključite v našo kodo, da boste lahko uporabljali njene funkcije.
  3. Datoteko z glavo zemljevida vključite v našo kodo, da boste lahko uporabljali njene funkcije.
  4. V našo kodo vključite imenski prostor std, da lahko uporabljate njegove razrede, ne da bi ga poklicali.
  5. Pokličite glavno funkcijo. Znak {označuje začetek telesa funkcije.
  6. Ustvarite zemljevid z imenom Študenti, kjer bodo ključi cela števila, vrednosti pa bodo nizi.
  7. Vstavite vrednosti v zemljevid Študenti. Na zemljevid bo vstavljen ključ 200 in vrednost Alice.
  8. Vstavite vrednosti v zemljevid Študenti. Na zemljevid bo vstavljen ključ 201 in vrednost John.
  9. Uporabite funkcijo size (), da dobite velikost zemljevida z imenom Študenti. To bi moralo vrniti 2.
  10. Na konzolo natisnite nekaj besedila.
  11. Z zanko for ustvarite iterator, ki ga poimenujete, da se prevrti nad elementi zemljevida z imenom Študenti.
  12. Na konzolo natisnite vrednosti zemljevida Učenci.
  13. Konec telesa zanke for.
  14. Konec telesa glavne () funkcije.

Vstavljanje podatkov v std :: map

Elemente lahko vnesete v std :: map s pomočjo funkcije insert (). Ne pozabite, da morajo biti ključi std :: map enolični.

Torej najprej preveri, ali je vsak ključ prisoten na zemljevidu. Če je prisoten, vnos ne bo vstavljen, ampak vrne iterator za obstoječi vnos. Če ni, se vnos vstavi.

Funkcija ima naslednje različice:

  • vstavi (par) - s to različico se na zemljevid vstavi par ključ-vrednost.
  • vstavi (start_itr, end_itr) - s to različico bodo vnosi vstavljeni znotraj obsega, ki ga z drugega zemljevida definirata start_itr in end_itr.

Funkcija insert_or_assing () deluje na enak način kot funkcija insert (), če pa dani ključ že obstaja na zemljevidu, bo njegova vrednost spremenjena.

2. primer:

#include #include using namespace std;int main() {map m{ {1,3} , {2,4} , {3,5} };m.insert({ 5, 6 });m.insert({ 1, 8 });m.insert_or_assign(1, 6);cout << "Key\tElement\n";for (auto itr = m.begin(); itr != m.end(); ++itr) {cout << itr->first << '\t' << itr->second << '\n';}return 0;}

Izhod:

Tu je posnetek zaslona kode:

Razlaga kode:

  1. Datoteko z glavo zemljevida vključite v našo kodo, da boste lahko uporabljali njene funkcije.
  2. V našo kodo vključite glavo glave iostream, da boste lahko uporabljali njene funkcije.
  3. V našo kodo vključite imenski prostor std, da lahko uporabljate njegove razrede, ne da bi ga poklicali.
  4. Pokličite glavno funkcijo. Znak {označuje začetek telesa funkcije.
  5. Ustvarite zemljevid z imenom m, kjer bodo ključi cela števila, vrednosti pa cela števila. Na zemljevid so bili vneseni trije vnosi.
  6. Vstavite nov vnos na zemljevid m. Na zemljevid bo vstavljen ključ 5 in vrednost 6.
  7. Poskus vnosa v že obstoječi ključ. Ker ključ 1 že obstaja na zemljevidu, vnos ne bo izveden.
  8. Uporaba funkcije insert_or_assign () za vstavljanje ali spreminjanje obstoječega vnosa. Ker ključ 1 že obstaja, se njegova vrednost spremeni na 6.
  9. Na konzolo natisnite nekaj besedila. Znak "\ t" ustvari vodoravni presledek, medtem ko znak "\ n" premakne kazalec miške v naslednjo vrstico.
  10. Uporabite zanko for, da ustvarite iterator z imenom itr za iteracijo po elementih zemljevida z imenom m.
  11. Na konzolo natisnite vrednosti zemljevida m. Znak "\ t" ustvari vodoravni presledek med vsako tipko in njeno ustrezno vrednostjo. Nasprotno pa znak "\ n" po vsaki ponovitvi premakne kazalec miške v naslednjo vrstico.
  12. Konec telesa zanke for.
  13. Program mora po uspešnem zaključku vrniti vrednost.
  14. Konec telesa glavne () funkcije.

Iskanje po zemljevidu

Funkcijo find () lahko uporabimo za iskanje elementov na zemljevidu po njihovih tipkah. Če ključa ne najdemo, funkcija vrne std :: map :: end. V nasprotnem primeru bo vrnjen iterator iskanega elementa.

2. primer:

#include #include #include using namespace std;int main() {map Students;Students.insert(std::pair(200, "Alice"));Students.insert(std::pair(201, "John"));std::map::iterator it = Students.find(201);if (it != Students.end()) {std::cout << endl << "Key 201 has the value: => "<< Students.find(201)->second << '\n';}}

Izhod:

Tu je posnetek zaslona kode:

Razlaga kode:

  1. Vključite datoteko glave iostream v našo kodo, da lahko uporabljate njene funkcije brez napak.
  2. V našo kodo vključite datoteko z glavo niza, da lahko uporabljate njene funkcije, ne da bi prišlo do napak.
  3. Datoteko z glavo zemljevida vključite v našo kodo, da lahko uporabljate njene funkcije brez napak.
  4. V našo kodo vključite imenski prostor std, da lahko uporabljate njegove razrede, ne da bi ga poklicali.
  5. Pokličite glavno funkcijo. {Označuje začetek telesa glavne () funkcije.
  6. Ustvarite zemljevid z imenom Študenti, katerih ključi bodo celoštevilčni in vrednostni nizi.
  7. Vstavite vrednosti v zemljevid Študenti. Na zemljevid bo vstavljen ključ 200 in vrednost Alice.
  8. Vstavite vrednosti v zemljevid Študenti. Na zemljevid bo vstavljen ključ 201 in vrednost John.
  9. Poiščite vrednost, povezano s ključem 201.
  10. Z stavkom if preverite, ali je vrednost za ključ najdena.
  11. Na konzolo natisnite vrednost ključa poleg besedila.
  12. Konec telesa stavka if.
  13. Konec telesa glavne () funkcije.

Brisanje podatkov z zemljevida

Funkcijo erase () lahko uporabimo za brisanje vrednosti z zemljevida. Preprosto ustvarimo iterator, ki kaže na element, ki ga želimo izbrisati. Nato se iterator posreduje funkciji erase ().

3. primer:

#include #include #include using namespace std;int main() {map my_map;my_map.insert(std::make_pair("cow", 1));my_map.insert(std::make_pair("cat", 2));my_map["lion"] = 3;map::iterator it = my_map.find("cat");my_map.erase(it);for (map::iterator it = my_map.begin(); it != my_map.end(); ++it)cout << (*it).first << ": " << (*it).second << endl;return 0;}

Izhod:

Tu je posnetek zaslona kode:

Razlaga kode:

  1. V našo kodo vključite glavo glave iostream, da boste lahko uporabljali njene funkcije.
  2. Datoteko z glavo niza vključite v našo kodo, da boste lahko uporabljali njene funkcije.
  3. Datoteko z glavo zemljevida vključite v našo kodo, da boste lahko uporabljali njene funkcije.
  4. V našo kodo vključite imenski prostor std, da lahko uporabljate njegove razrede, ne da bi ga poklicali.
  5. Pokličite glavno funkcijo. Znak {označuje začetek telesa glavne () funkcije.
  6. Ustvarite zemljevid z imenom my_map, katerega ključi bodo nizi in vrednosti celih števil.
  7. Vstavite vrednosti na zemljevid my_map. Na zemljevid bo vstavljen ključ krave in vrednost 1.
  8. Vstavite vrednosti na zemljevid my_map. Na zemljevid bo vstavljen ključ Cat in vrednost 2.
  9. Na zemljevid my_map s ključem leva dodajte vrednost 3.
  10. Ustvarite iterator za prehod po zemljevidu my_map, ki išče ključno mačko.
  11. Izbrišite element, na katerega opozarja iterator.
  12. Z iteratorjem prehodite elemente zemljevida my_map od začetka do konca.
  13. Natisnite vsebino zemljevida my_map na konzoli.
  14. Program mora po uspešnem zaključku vrniti izhodne podatke.
  15. Konec telesa glavne () funkcije.

Povzetek:

  • Zemljevid je asociativni vsebnik, ki hrani predmete v preslikani obliki.
  • Vsak element na zemljevidu ima ključno vrednost in preslikano vrednost.
  • Na zemljevidu dve preslikani vrednosti ne moreta deliti vrednosti ključev.
  • Vrednosti ključa pomagajo pri edinstvenem razvrščanju in prepoznavanju elementov.
  • Preslikane vrednosti pomagajo pri shranjevanju vsebine, povezane s ključem.
  • Zemljevid C ++ shranjuje edinstvene ključe v razvrščenem vrstnem redu.
  • Za delo z zemljevidom C ++ ustvarimo iterator za iteracijo po elementih.
  • S ponoviteljem lahko izvajamo naloge, kot je iskanje in brisanje elementov z zemljevida.