Žemėlapis C ++ standartinių šablonų bibliotekoje (STL) su pavyzdžiu

Turinys:

Anonim

Kas yra „std :: map“?

C ++ sistemoje MAP yra asociatyvus konteineris, kuriame saugomi elementai susietoje formoje. Kiekvienas žemėlapio elementas susideda iš raktinės vertės ir susietos vertės. Dviem susietoms reikšmėms negalima naudoti tų pačių pagrindinių verčių.

Pagrindinės vertės yra tinkamos unikaliam elementų rūšiavimui ir identifikavimui. Susietos vertės skirtos turiniui, susijusiam su raktu, saugoti. Šie du tipai gali skirtis, tačiau nario tipas juos sujungia per poros tipą, kuris sujungia abu.

Šioje C ++ pamokoje sužinosite:

  • Kas yra „std :: map“?
  • Kodėl verta naudoti „std :: map“?
  • Sintaksė:
  • Narių tipai:
  • Integruotos funkcijos
  • Kartojasi per žemėlapio elementus
  • Duomenų įterpimas į „std :: map“:
  • Paieška žemėlapyje
  • Duomenų ištrynimas iš žemėlapio

Kodėl verta naudoti „std :: map“?

Žemėlapio naudojimo priežastys:

  • „std :: map“ unikalius raktus saugo tik rūšiuojama tvarka, atsižvelgiant į pasirinktus rūšiavimo kriterijus.
  • Lengva ir greitesnė elementų paieška naudojant raktą.
  • Prie kiekvieno rakto pridedamas tik vienas elementas.
  • „std :: map“ gali būti naudojamas kaip asociacinis masyvas.
  • std :: žemėlapis įgyvendinamas naudojant dvejetainius medžius (subalansuotas).

Sintaksė:

Norėdami paskelbti „std :: map“, naudokite šią sintaksę:

std::mapmap_name;
  • Key_datatype žymi žemėlapio raktų duomenų tipą.
  • „Value_datatype“ žymi žemėlapio raktus atitinkančių reikšmių duomenų tipą.
  • „Map_name“ yra žemėlapio pavadinimas.

Pavyzdžiui:

map my_map;

Mes paskelbėme žemėlapį pavadinimu my_map. Žemėlapyje bus eilutė kaip pagrindiniai duomenų tipai ir sveikasis skaičius kaip reikšmių duomenų tipas.

Narių tipai:

Nario funkcijos gali naudoti šiuos narių tipus kaip parametrus arba grąžinimo tipą:

  • key_type: Key (pirmasis parametras šablone)
  • mapped_type: T (antrasis parametras šablone)
  • key_compare: Palyginti (trečiasis parametras šablone)
  • allokatoriaus tipas: Alloc (ketvirtasis parametras šablone)
  • vertės_tipas: pora
  • value_compare: Įterptoji funkcijų klasė elementams lyginti
  • nuoroda: allokatoriaus tipas :: nuoroda
  • const_reference: alokatoriaus tipas :: const_reference
  • pointer: allokatoriaus tipas :: rodyklė
  • const_pointer: alokatoriaus tipas :: const_pointer
  • iteratorius: dvikryptis iteratorius, skirtas vertės_tipui
  • const_iterator: dvikryptis iteratorius į const value_type
  • reverse_iterator: atvirkštinis iteratorius
  • const_reverse_iterator: pastovus atvirkštinis iteratorius
  • skirtumo tipas: ptrdiff_t
  • dydis_tipas: dydis_t

Integruotos funkcijos

„std :: map“ turi integruotas funkcijas. Kai kurie iš jų apima:

  • begin () - ši funkcija grąžina iteratorių į pirmąjį žemėlapio elementą.
  • dydis () - ši funkcija grąžina žemėlapio elementų skaičių.
  • tuščias () - ši funkcija pateikia loginę reikšmę, nurodančią, ar žemėlapis tuščias.
  • įterpti (pora (raktas, reikšmė)) - ši funkcija įterpia naują rakto ir vertės porą į žemėlapį.
  • rasti (val) - ši funkcija suteikia it elementą val elementui, jei jis rastas. Priešingu atveju jis grąžins m.end ().
  • Ištrinti (iteratoriaus padėtis) - ši funkcija ištrina elementą iteratoriaus nurodytoje vietoje.
  • ištrinti (const g) - ši funkcija ištrina pagrindinę reikšmę g iš žemėlapio.
  • Išvalyti () - ši funkcija ištrina visus elementus iš žemėlapio.

Kartojasi per žemėlapio elementus

Galite kartoti žemėlapio elementus. Mes tiesiog turime sukurti iteratorių ir naudoti jį tam. Pavyzdžiui:

1 pavyzdys:

#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;}}

Išvestis:

Čia yra kodo ekrano kopija:

Kodo paaiškinimas:

  1. Įtraukite „iostream“ antraštės failą į mūsų kodą, kad galėtumėte naudoti jo funkcijas.
  2. Įtraukite eilutės antraštės failą į mūsų kodą, kad galėtumėte naudoti jo funkcijas.
  3. Įtraukite žemėlapio antraštės failą į mūsų kodą, kad galėtumėte naudoti jo funkcijas.
  4. Įtraukite standartinę vardų sritį į mūsų kodą, kad galėtumėte naudoti jos klases nepaskambinę.
  5. Iškvieskite pagrindinę () funkciją. {Žymi funkcijos kūno pradžią.
  6. Sukurkite žemėlapį pavadinimu Studentai, kur raktai bus sveiki skaičiai, o reikšmės bus eilutės.
  7. Įterpti vertes į žemėlapį Studentai. 200 žemėlapis ir Alice vertė bus įterpti į žemėlapį.
  8. Įterpti vertes į žemėlapį Studentai. Į žemėlapį bus įterptas raktas 201 ir Jono vertė.
  9. Norėdami gauti žemėlapio pavadinimą „Mokiniai“, naudokite funkciją size (). Tai turėtų pateikti 2.
  10. Atsispausdinkite tekstą konsolėje.
  11. Naudokite „for“ kilpą, kad sukurtumėte iteratorių, pavadintą jį kartoti virš žemėlapio „Studentai“ elementų.
  12. Atsispausdinkite žemėlapio Studentų reikšmes konsolėje.
  13. Už kilpos kūno pabaiga.
  14. Pagrindinės () funkcijos kūno pabaiga.

Duomenų įterpimas į „std :: map“

Elementus galite įvesti į std :: map naudodami funkciją insert (). Atminkite, kad std :: map raktai turi būti unikalūs.

Taigi pirmiausia patikrina, ar žemėlapyje yra kiekvienas raktas. Jei jis yra, įrašas nebus įterptas, tačiau jis grąžins esamo įrašo iteratorių. Jei jo nėra, įrašas įterpiamas.

Funkcija turi šiuos variantus:

  • įterpti (pora) - naudojant šį variantą raktų ir verčių pora įterpiama į žemėlapį.
  • įterpti (start_itr, end_itr) - su šiuo variantu įrašai bus įterpti į diapazoną, kurį apibrėžia start_itr ir end_itr iš kito žemėlapio.

Funkcija „ insert_or_assing ()“ veikia taip pat, kaip ir funkcija „insert ()“, tačiau jei nurodytas raktas jau yra žemėlapyje, jo vertė bus pakeista.

2 pavyzdys:

#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;}

Išvestis:

Čia yra kodo ekrano kopija:

Kodo paaiškinimas:

  1. Įtraukite žemėlapio antraštės failą į mūsų kodą, kad galėtumėte naudoti jo funkcijas.
  2. Įtraukite „iostream“ antraštės failą į mūsų kodą, kad galėtumėte naudoti jo funkcijas.
  3. Įtraukite standartinę vardų sritį į mūsų kodą, kad galėtumėte naudoti jos klases nepaskambinę.
  4. Iškvieskite pagrindinę () funkciją. {Žymi funkcijos kūno pradžią.
  5. Sukurkite žemėlapį pavadinimu m, kuriame raktai bus sveiki skaičiai, o reikšmės bus sveiki skaičiai. Žemėlapyje padaryti trys įrašai.
  6. Įterpkite naują įrašą į žemėlapį m. 5 žemėlapis ir 6 reikšmė bus įterpti į žemėlapį.
  7. Bandoma įrašyti jau esamą raktą. Kadangi raktas 1 jau yra žemėlapyje, įrašas nebus daromas.
  8. Jei norite įterpti ar modifikuoti esamą įrašą, naudokite funkciją įterpti_ar__pavadinimas () 1 raktas jau yra, jo vertė bus pakeista į 6.
  9. Atsispausdinkite tekstą konsolėje. Simbolis „\ t“ sukuria horizontalią erdvę, o „\ n“ simbolis perkelia pelės žymeklį į kitą eilutę.
  10. Naudokite „for“ kilpą, kad sukurtumėte iteratorių, pavadintą itr, kad kartotumėte žemėlapio, pavadinto m, elementus.
  11. Atsispausdinkite žemėlapio m reikšmes konsolėje. Simbolis „\ t“ sukuria horizontalų tarpą tarp kiekvieno rakto ir jo reikšmės. Priešingai, „\ n“ simbolis perkelia pelės žymeklį į kitą eilutę po kiekvienos iteracijos.
  12. Kilpos kūno pabaiga.
  13. Sėkmingai baigus, programa turi grąžinti vertę.
  14. Pagrindinės () funkcijos kūno pabaiga.

Paieška žemėlapyje

Funkciją „find ()“ galime naudoti norėdami ieškoti elementų žemėlapyje pagal jų klavišus. Jei raktas nerastas, funkcija grąžina std :: map :: end. Priešingu atveju bus grąžintas ieškomo elemento iteratorius.

2 pavyzdys:

#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';}}

Išvestis:

Čia yra kodo ekrano kopija:

Kodo paaiškinimas:

  1. Įtraukite „iostream“ antraštės failą į mūsų kodą, kad galėtumėte naudoti jo funkcijas be klaidų.
  2. Įtraukite eilutės antraštės failą į mūsų kodą, kad galėtumėte naudoti jo funkcijas be klaidų.
  3. Įtraukite žemėlapio antraštės failą į mūsų kodą, kad galėtumėte naudoti jo funkcijas be klaidų.
  4. Įtraukite standartinę vardų sritį į mūsų kodą, kad galėtumėte naudoti jos klases nepaskambinę.
  5. Iškvieskite pagrindinę () funkciją. {Žymi pagrindinės () funkcijos kūno pradžią.
  6. Sukurkite žemėlapį pavadinimu Studentai, kurių raktai bus sveiki skaičiai ir reikšmių eilutės.
  7. Įterpti vertes į žemėlapį Studentai. 200 žemėlapis ir Alice vertė bus įterpti į žemėlapį.
  8. Įterpti vertes į žemėlapį Studentai. Į žemėlapį bus įterptas raktas 201 ir Jono vertė.
  9. Ieškokite vertės, susietos su raktu 201.
  10. Naudokite „if“ sakinį, kad patikrintumėte, ar rasta rakto reikšmė.
  11. Atsispausdinkite rakto vertę šalia teksto konsolėje.
  12. If teiginio turinio pabaiga.
  13. Pagrindinės () funkcijos kūno pabaiga.

Duomenų ištrynimas iš žemėlapio

Norėdami ištrinti vertę iš žemėlapio, galime naudoti erase () funkciją. Mes tiesiog sukuriame iteratorių, kuris nurodo elementą, kurį reikia ištrinti. Tada iteratorius perduodamas funkcijai ištrinti ().

3 pavyzdys:

#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;}

Išvestis:

Čia yra kodo ekrano kopija:

Kodo paaiškinimas:

  1. Įtraukite „iostream“ antraštės failą į mūsų kodą, kad galėtumėte naudoti jo funkcijas.
  2. Įtraukite eilutės antraštės failą į mūsų kodą, kad galėtumėte naudoti jo funkcijas.
  3. Įtraukite žemėlapio antraštės failą į mūsų kodą, kad galėtumėte naudoti jo funkcijas.
  4. Įtraukite standartinę vardų sritį į mūsų kodą, kad galėtumėte naudoti jos klases nepaskambinę.
  5. Iškvieskite pagrindinę () funkciją. {Žymi pagrindinės () funkcijos kūno pradžią.
  6. Sukurkite žemėlapį pavadinimu my_map, kurio raktai bus eilutės ir reikšmės sveiki skaičiai.
  7. Įterpkite reikšmes į žemėlapį my_map. Karvės raktas ir vertė 1 bus įterpti į žemėlapį.
  8. Įterpkite reikšmes į žemėlapį my_map. „Cat“ raktas ir vertė 2 bus įterpti į žemėlapį.
  9. Pridėkite 3 vertę į žemėlapį my_map naudodami liūto raktą.
  10. Sukurkite iteratorių, kad kartotumėte žemėlapį my_map, ieškodami pagrindinės katės.
  11. Ištrinkite iteratoriaus nurodytą elementą.
  12. Kartokite žemėlapio „my_map“ elementus nuo pradžios iki pabaigos naudodami iteratorių.
  13. Atsispausdinkite žemėlapio „my_map“ turinį konsolėje.
  14. Sėkmingai baigus, programa turi grąžinti išvestį.
  15. Pagrindinės () funkcijos kūno pabaiga.

Santrauka:

  • Žemėlapis yra asociatyvus sudėtinis rodinys, kuriame saugomi elementai susietoje formoje.
  • Kiekvienas žemėlapio elementas turi pagrindinę ir susietą vertę.
  • Žemėlapyje dvi susietos vertės negali bendrinti pagrindinių reikšmių.
  • Pagrindinės vertės padeda unikaliai rūšiuoti ir identifikuoti elementus.
  • Susietos vertės padeda saugoti su raktu susietą turinį.
  • C ++ žemėlapyje saugomi unikalūs raktai rūšiuojama tvarka.
  • Norėdami dirbti su C ++ žemėlapiu, mes sukuriame iteratorių, norėdami kartoti elementus.
  • Su iteratoriumi galime atlikti tokias užduotis kaip elementų paieška ir ištrynimas iš žemėlapio.