Što je std :: map?
U C ++-u MAP je asocijativni spremnik koji sprema stavke u mapiranom obliku. Svaka stavka na karti sastoji se od ključa / vrijednosti i mapirane vrijednosti. Dvije preslikane vrijednosti ne mogu dijeliti iste vrijednosti ključa.
Ključne vrijednosti dobre su za jedinstveno sortiranje i prepoznavanje elemenata. Mapirane vrijednosti služe za pohranu sadržaja povezanog s ključem. Dvije se vrste mogu razlikovati, ali vrsta člana kombinira ih putem tipa para koji kombinira oboje.
U ovom C ++ tutorialu naučit ćete:
- Što je std :: map?
- Zašto koristiti std :: map?
- Sintaksa:
- Vrste članova:
- Ugrađene funkcije
- Iteriranje elemenata karte
- Umetanje podataka u std :: map:
- Traženje na karti
- Brisanje podataka s karte
Zašto koristiti std :: map?
Evo razloga za upotrebu karte:
- std :: map pohranjuje jedinstvene ključeve samo u sortiranom redoslijedu na temelju odabranih kriterija sortiranja.
- Jednostavno je i brže traženje elemenata pomoću ključa.
- Uz svaki je ključ pričvršćen samo jedan element.
- std :: map može se koristiti kao asocijativni niz.
- std :: map je moguće implementirati pomoću binarnih stabala (uravnoteženo).
Sintaksa:
Da biste proglasili std :: map, upotrijebite ovu sintaksu:
std::mapmap_name;
- Tip_data označava tip podataka ključeva karte.
- Vrijednost_datatip označava tip podataka vrijednosti koje odgovaraju ključevima karte.
- Ime_karte naziv je karte.
Na primjer:
mapmy_map;
Proglasili smo mapu pod nazivom my_map. Karta će imati niz kao ključne vrste podataka i cijeli broj kao vrijednosti datatype.
Vrste članova:
Funkcije člana mogu koristiti sljedeće vrste članova kao parametre ili kao povratne vrste:
- key_type: Ključ (prvi parametar u predlošku)
- mapped_type: T (Drugi parametar u predlošku)
- key_compare: Usporedba (treći parametar u predlošku)
- allocator_type: Alloc (četvrti parametar u predlošku)
- value_type: par
- value_compare: Ugniježđena klasa funkcije za usporedbu elemenata
- referenca: allocator_type :: reference
- const_reference: allocator_type :: const_reference
- pokazivač: allocator_type :: pointer
- const_pointer: alokator_tip :: const_pointer
- iterator: dvosmjerni iterator na value_type
- const_iterator: dvosmjerni iterator za const value_type
- reverse_iterator: obrnuti iterator
- const_reverse_iterator: konstantni obrnuti iterator
- tip_razlike : ptrdiff_t
- size_type: size_t
Ugrađene funkcije
std :: map dolazi s ugrađenim funkcijama. Neki od njih uključuju:
- begin () - Ova funkcija vraća iterator na prvu stavku karte.
- size () - Ova funkcija vraća broj stavki na karti.
- empty () - Ova funkcija vraća logičku vrijednost koja označava je li karta prazna.
- umetanje (par (ključ, vrijednost)) - Ova funkcija na kartu ubacuje novi par ključ / vrijednost.
- find (val) - Ova funkcija daje iterator elementu val ako je pronađen. U suprotnom, vratit će m.end ().
- Izbriši (položaj iteratora) - Ova funkcija briše stavku na položaju koji je ukazao iterator.
- brisanje (const g) - Ova funkcija briše ključ / vrijednost g s karte.
- Clear () - Ova funkcija briše sve stavke s karte.
Iteriranje elemenata karte
Možete prelistavati elemente karte. Jednostavno moramo stvoriti iterator i koristiti ga za to. Na primjer:
Primjer 1:
#include#include #include
Izlaz:
Evo snimke zaslona koda:
Objašnjenje koda:
- Uključite datoteku zaglavlja iostream u naš kod da biste koristili njegove funkcije.
- Uključite datoteku zaglavlja niza u naš kod da biste koristili njegove funkcije.
- Uključite datoteku zaglavlja karte u naš kod da biste koristili njegove funkcije.
- Uključite std prostor imena u naš kod da biste koristili njegove klase bez pozivanja.
- Pozovite glavnu () funkciju. Oznaka {označava početak tijela funkcije.
- Stvorite mapu nazvanu Studenti gdje će ključevi biti cijeli brojevi, a vrijednosti će biti nizovi.
- Umetnite vrijednosti u mapu Studenti. Ključ od 200 i vrijednost Alice bit će umetnuti na kartu.
- Umetnite vrijednosti u mapu Studenti. Ključ od 201 i vrijednost Ivana bit će umetnuti na kartu.
- Upotrijebite funkciju size () da biste dobili veličinu karte s imenom Studenti. Ovo bi trebalo vratiti 2.
- Ispišite malo teksta na konzolu.
- Upotrijebite for petlju za izradu iteratora s imenom da se prevlači po elementima karte s imenom Studenti.
- Ispišite vrijednosti karte Učenici na konzoli.
- Kraj tijela petlje for.
- Kraj tijela glavne () funkcije.
Umetanje podataka u std :: map
Stavke možete unijeti u std :: map pomoću funkcije insert (). Imajte na umu da ključevi std :: map moraju biti jedinstveni.
Dakle, prvo provjerava je li svaki ključ prisutan na mapi. Ako je prisutan, unos se neće umetnuti, ali vraća iterator za postojeći unos. Ako nije prisutan, unos se umetne.
Funkcija ima sljedeće varijacije:
- umetak (par) - s ovom se varijacijom na kartu ubacuje par ključ / vrijednost.
- insert (start_itr, end_itr) - s ovom će se varijacijom unosi umetnuti unutar raspona definiranog start_itr i end_itr s druge karte.
Funkcija insert_or_assing () radi na isti način kao i funkcija insert (), ali ako zadani ključ već postoji na mapi, njegova će vrijednost biti izmijenjena.
Primjer 2:
#include
Izlaz:
Evo snimke zaslona koda:
Objašnjenje koda:
- Uključite datoteku zaglavlja karte u naš kod da biste koristili njegove funkcije.
- Uključite datoteku zaglavlja iostream u naš kod da biste koristili njegove funkcije.
- Uključite std prostor imena u naš kod da biste koristili njegove klase bez pozivanja.
- Pozovite glavnu () funkciju. Oznaka {označava početak tijela funkcije.
- Stvorite mapu imena m gdje će ključevi biti cijeli brojevi, a vrijednosti će biti cijeli brojevi. Na kartu su unesena tri unosa.
- Umetnite novi unos na kartu m. Na kartu će se umetnuti ključ 5 i vrijednost 6.
- Pokušaj unosa u već postojeći ključ. Budući da ključ 1 već postoji na karti, unos se neće izvršiti.
- Korištenje funkcije insert_or_assign () za umetanje ili izmjenu postojećeg unosa. Budući da ključ 1 već postoji, njegova će vrijednost biti promijenjena u 6.
- Ispišite malo teksta na konzolu. Znak "\ t" stvara vodoravni razmak dok znak "\ n" pomiče kursor miša u sljedeći redak.
- Upotrijebite for petlju za stvaranje iteratora s imenom itr koji će prelaziti preko elemenata karte s imenom m.
- Ispišite vrijednosti karte m na konzoli. Znak "\ t" stvara vodoravni razmak između svake tipke i odgovarajuće vrijednosti. Suprotno tome, znak "\ n" pomiče kursor miša u sljedeći redak nakon svake iteracije.
- Kraj tijela petlje for.
- Program mora vratiti vrijednost nakon uspješnog završetka.
- Kraj tijela glavne () funkcije.
Traženje na karti
Funkciju find () možemo koristiti za traženje elemenata na karti prema njihovim ključevima. Ako ključ nije pronađen, funkcija vraća std :: map :: end. U suprotnom, vratit će se iterator traženog elementa.
Primjer 2:
#include#include #include
Izlaz:
Evo snimke zaslona koda:
Objašnjenje koda:
- Uključite iostream datoteku zaglavlja u naš kod da biste koristili njegove funkcije bez pogrešaka.
- Uključite datoteku zaglavlja niza u naš kod da biste koristili njegove funkcije bez pogrešaka.
- Uključite datoteku zaglavlja karte u naš kôd da biste koristili njegove funkcije bez pogrešaka.
- Uključite std prostor imena u naš kod da biste koristili njegove klase bez pozivanja.
- Pozovite glavnu () funkciju. Oznaka {označava početak tijela main () funkcije.
- Stvorite mapu nazvanu Studenti čiji će ključevi biti cijeli brojevi i nizovi vrijednosti.
- Umetnite vrijednosti u mapu Studenti. Ključ od 200 i vrijednost Alice bit će umetnuti na kartu.
- Umetnite vrijednosti u mapu Studenti. Ključ od 201 i vrijednost Ivana bit će umetnuti na kartu.
- Potražite vrijednost povezanu s ključem 201.
- Pomoću naredbe if provjerite je li pronađena vrijednost za ključ.
- Ispišite vrijednost ključa uz neki tekst na konzoli.
- Kraj tijela izjave if.
- Kraj tijela glavne () funkcije.
Brisanje podataka s karte
Funkciju erase () možemo koristiti za brisanje vrijednosti s karte. Jednostavno stvorimo iterator koji pokazuje na element koji se želi izbrisati. Iterator se zatim prenosi funkciji erase ().
Primjer 3:
#include#include #include
Izlaz:
Evo snimke zaslona koda:
Objašnjenje koda:
- Uključite datoteku zaglavlja iostream u naš kod da biste koristili njegove funkcije.
- Uključite datoteku zaglavlja niza u naš kod da biste koristili njegove funkcije.
- Uključite datoteku zaglavlja karte u naš kod da biste koristili njegove funkcije.
- Uključite std prostor imena u naš kod da biste koristili njegove klase bez pozivanja.
- Pozovite glavnu () funkciju. Oznaka {označava početak tijela glavne () funkcije.
- Stvorite mapu imena my_map čiji će ključevi biti nizovi i vrijednosti cijelih brojeva.
- Umetnite vrijednosti u kartu my_map. Na kartu će se umetnuti ključ krave i vrijednost 1.
- Umetnite vrijednosti u kartu my_map. Ključ Cat i vrijednost 2 bit će umetnuti na kartu.
- Dodajte vrijednost 3 na kartu my_map ključem lava.
- Stvorite iterator za prelazak preko karte my_map u potrazi za ključnom mačkom.
- Izbrišite element na koji je iterator ukazao.
- Pomoću iteratora prelazite preko elemenata karte my_map od početka do kraja.
- Ispišite sadržaj mape my_map na konzoli.
- Program mora vratiti izlaz nakon uspješnog završetka.
- Kraj tijela glavne () funkcije.
Sažetak:
- Karta je asocijativni spremnik koji pohranjuje stavke u mapiranom obliku.
- Svaka stavka na karti ima ključnu vrijednost i mapiranu vrijednost.
- Na karti dvije mapirane vrijednosti ne mogu dijeliti ključne vrijednosti.
- Vrijednosti ključa pomažu u jedinstvenom sortiranju i prepoznavanju elemenata.
- Mapirane vrijednosti pomažu u pohrani sadržaja povezanog s ključem.
- Karta C ++ pohranjuje jedinstvene ključeve u razvrstanom redoslijedu.
- Da bismo radili s mapom C ++, kreiramo iterator za iteraciju po elementima.
- Pomoću iteratora možemo izvršavati zadatke poput pretraživanja i brisanja predmeta s karte.