Kort i C ++ Standard skabelonbibliotek (STL) med eksempel

Indholdsfortegnelse:

Anonim

Hvad er std :: map?

I C ++ er en MAP en associerende container, der lagrer varer i en kortlagt form. Hvert element på kortet består af nøgleværdi og en kortlagt værdi. To kortlagte værdier kan ikke dele de samme nøgleværdier.

Nøgleværdierne er gode til at sortere og identificere elementer entydigt. De kortlagte værdier er til lagring af indhold, der er knyttet til nøglen. De to kan variere i typer, men medlemstypen kombinerer dem via en par-type, der kombinerer begge.

I denne C ++ tutorial lærer du:

  • Hvad er std :: map?
  • Hvorfor bruge std :: map?
  • Syntaks:
  • Medlemstyper:
  • Indbyggede funktioner
  • Iterere over kortelementer
  • Indsættelse af data i std :: kort:
  • Søgning på et kort
  • Sletning af data fra et kort

Hvorfor bruge std :: map?

Her er grunde til at bruge kort:

  • std :: map gemmer kun unikke nøgler i sorteret rækkefølge baseret på valgte sorteringskriterier.
  • Det er let og hurtigere at søge efter elementer ved hjælp af nøglen.
  • Der er kun knyttet et element til hver nøgle.
  • std :: map kan bruges som et associerende array.
  • std :: map kan implementeres ved hjælp af binære træer (afbalanceret).

Syntaks:

For at erklære std :: map skal du bruge denne syntaks:

std::mapmap_name;
  • Key_datatype angiver datatypen for kortnøglerne.
  • Value_datatype angiver datatypen for de værdier, der svarer til kortnøglerne.
  • Kortnavnet er navnet på kortet.

For eksempel:

map my_map;

Vi erklærede et kort ved navn my_map. Kortet vil have en streng som vigtige datatyper og heltal som værdier datatype.

Medlemstyper:

Medlemsfunktionerne kan bruge følgende medlemstyper som enten parametre eller returtype:

  • key_type: Key (Den første parameter i skabelonen)
  • mapped_type: T (Den anden parameter i skabelonen)
  • key_compare: Compare (Den tredje parameter i skabelonen)
  • allocator_type: Alloc (Den fjerde parameter i skabelonen)
  • value_type: pair
  • value_compare: Indlejret funktionsklasse til sammenligning af elementer
  • reference: allocator_type :: reference
  • const_reference: allocator_type :: const_reference
  • pointer: allocator_type :: pointer
  • const_pointer: allocator_type :: const_pointer
  • iterator: en tovejs iterator til value_type
  • const_iterator: en tovejs iterator til const value_type
  • reverse_iterator: en reverse iterator
  • const_reverse_iterator: en konstant omvendt iterator
  • forskellen_type: ptrdiff_t
  • størrelse_type: størrelse_t

Indbyggede funktioner

std :: map leveres med indbyggede funktioner. Nogle af disse inkluderer:

  • start () - Denne funktion returnerer iteratoren til det første element på kortet.
  • størrelse () - Denne funktion returnerer antallet af emner på et kort.
  • tom () - Denne funktion returnerer en boolsk værdi, der angiver, om et kort er tomt.
  • indsæt (par (nøgle, værdi)) - Denne funktion indsætter nyt nøgleværdipar til et kort.
  • find (val) - Denne funktion giver iteratoren til val-elementet, hvis den findes. Ellers returnerer den m.end ().
  • Slet (iteratorposition) - Denne funktion sletter elementet på den position, som iteratoren peger på.
  • slet (const g) - Denne funktion sletter nøgleværdien g fra et kort.
  • Ryd () - Denne funktion sletter alle emner fra et kort.

Iterere over kortelementer

Du kan gentage kortelementerne. Vi er simpelthen nødt til at oprette en iterator og bruge den til dette. For eksempel:

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

Produktion:

Her er et screenshot af koden:

Kode Forklaring:

  1. Inkluder iostream header-filen i vores kode for at bruge dens funktioner.
  2. Inkluder strenghovedfilen i vores kode for at bruge dens funktioner.
  3. Inkluder korthovedfilen i vores kode for at bruge dens funktioner.
  4. Inkluder std navneområdet i vores kode for at bruge dets klasser uden at kalde det.
  5. Ring til hovedfunktionen (). {Markerer begyndelsen på funktionens krop.
  6. Opret et kort med navnet Studerende, hvor nøglerne vil være heltal, og værdierne er strenge.
  7. Indsæt værdier i kortet Studerende. En nøgle på 200 og en værdi af Alice indsættes på kortet.
  8. Indsæt værdier i kortet Studerende. En nøgle på 201 og en værdi af John indsættes på kortet.
  9. Brug funktionen størrelse () til at få størrelsen på kortet ved navn Studerende. Dette skal returnere en 2.
  10. Udskriv tekst på konsollen.
  11. Brug en for-løkke til at oprette en iterator, der hedder den for at gentage elementerne på kortet ved navn Students.
  12. Udskriv værdierne på kortet Studerende på konsollen.
  13. Slutningen af ​​for-sløjfens krop.
  14. Slutningen af ​​hovedfunktionens () krop.

Indsættelse af data i std :: map

Du kan indtaste elementer i std :: map ved hjælp af funktionen insert (). Husk, at std :: map-tasterne skal være unikke.

Så det kontrollerer først, om hver nøgle er til stede på kortet. Hvis den er til stede, indsættes posten ikke, men den returnerer iteratoren for den eksisterende post. Hvis den ikke er til stede, indsættes posten.

Funktionen har følgende variationer:

  • indsæt (par) - med denne variation indsættes et nøgleværdipar på kortet.
  • indsæt (start_itr, end_itr) - med denne variation indsættes posterne inden for det interval, der er defineret af start_itr og end_itr fra et andet kort.

Funktionen insert_or_assing () fungerer på samme måde som insert () -funktionen, men hvis den givne nøgle allerede findes på kortet, ændres dens værdi.

Eksempel 2:

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

Produktion:

Her er et screenshot af koden:

Kode Forklaring:

  1. Inkluder korthovedfilen i vores kode for at bruge dens funktioner.
  2. Inkluder iostream header-filen i vores kode for at bruge dens funktioner.
  3. Inkluder std navneområdet i vores kode for at bruge dets klasser uden at kalde det.
  4. Ring til hovedfunktionen (). {Markerer begyndelsen på funktionens krop.
  5. Opret et kort med navnet m, hvor nøglerne vil være heltal, og værdierne vil være heltal. Der er foretaget tre poster på kortet.
  6. Indsæt en ny post på kortet m. En nøgle på 5 og en værdi på 6 indsættes på kortet.
  7. Forsøger at indtaste en allerede eksisterende nøgle. Da nøgle 1 allerede findes på kortet, foretages indtastningen ikke.
  8. Brug funktionen insert_or_assign () til at indsætte eller ændre en eksisterende post. Da nøgle 1 allerede findes, ændres dens værdi til 6.
  9. Udskriv tekst på konsollen. Tegnet "\ t" skaber et vandret mellemrum, mens "\ n" tegnet flytter musemarkøren til den næste linje.
  10. Brug en for-løkke til at oprette en iterator med navnet itr til at gentage elementerne på kortet med navnet m.
  11. Udskriv værdierne på kortet m på konsollen. Tegnet "\ t" skaber et vandret mellemrum mellem hver tast og dens tilsvarende værdi. I modsætning hertil flytter karakteren "\ n" musemarkøren til den næste linje efter hver iteration.
  12. Slutningen af ​​kroppen til en løkke.
  13. Programmet skal returnere værdi efter vellykket afslutning.
  14. Slutningen af ​​hovedfunktionens () krop.

Søgning på et kort

Vi kan bruge find () - funktionen til at søge efter elementer på et kort ved hjælp af deres taster. Hvis nøglen ikke findes, returnerer funktionen std :: map :: end. Ellers returneres en iterator af det søgte element.

Eksempel 2:

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

Produktion:

Her er et screenshot af koden:

Kode Forklaring:

  1. Inkluder iostream headerfilen i vores kode for at bruge dens funktioner uden at få fejl.
  2. Inkluder strenghovedfilen i vores kode for at bruge dens funktioner uden at få fejl.
  3. Inkluder korthovedfilen i vores kode for at bruge dens funktioner uden at få fejl.
  4. Inkluder std navneområdet i vores kode for at bruge dets klasser uden at kalde det.
  5. Ring til hovedfunktionen (). {Markerer begyndelsen på kroppen af ​​hovedfunktionen ().
  6. Opret et kort med navnet Studerende, hvis nøgler vil være heltal og værdistrenge.
  7. Indsæt værdier i kortet Studerende. En nøgle på 200 og en værdi af Alice indsættes på kortet.
  8. Indsæt værdier i kortet Studerende. En nøgle på 201 og en værdi af John indsættes på kortet.
  9. Se efter den værdi, der er knyttet til en nøgle på 201.
  10. Brug en if-sætning til at kontrollere, om værdien for nøglen findes.
  11. Udskriv værdien af ​​nøglen sammen med noget tekst på konsollen.
  12. Slutningen af ​​kroppen, hvis udsagnet.
  13. Slutningen af ​​hovedfunktionens () krop.

Sletning af data fra et kort

Vi kan bruge funktionen slet () til at slette en værdi fra et kort. Vi opretter simpelthen en iterator, der peger på det element, der skal slettes. Iteratoren sendes derefter til sletningsfunktionen ().

Eksempel 3:

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

Produktion:

Her er et screenshot af koden:

Kode Forklaring:

  1. Inkluder iostream header-filen i vores kode for at bruge dens funktioner.
  2. Inkluder strenghovedfilen i vores kode for at bruge dens funktioner.
  3. Inkluder korthovedfilen i vores kode for at bruge dens funktioner.
  4. Inkluder std navneområdet i vores kode for at bruge dets klasser uden at kalde det.
  5. Ring til hovedfunktionen (). {Markerer begyndelsen på kroppen til hovedfunktionen ().
  6. Opret et kort med navnet my_map, hvis nøgler vil være strenge og værdier som heltal.
  7. Indsæt værdier i kortet my_map. En nøgle til ko og en værdi på 1 indsættes på kortet.
  8. Indsæt værdier i kortet my_map. En nøgle til Cat og en værdi på 2 indsættes på kortet.
  9. Tilføj en værdi 3 til kortet my_map med en nøgle til en løve.
  10. Opret en iterator for at gentage over kortet my_map på udkig efter nøglekatten.
  11. Slet det element, som iteratoren peger på.
  12. Brug en iterator til at gentage elementerne på kortet my_map fra start til slut.
  13. Udskriv indholdet af kortet my_map på konsollen.
  14. Programmet skal returnere output, når det er gennemført.
  15. Slutningen af ​​hovedfunktionens () krop.

Resumé:

  • Et kort er en associerende container, der gemmer varer i en kortlagt form.
  • Hvert element på kortet har en nøgleværdi og en kortlagt værdi.
  • På et kort kan to kortlagte værdier ikke dele nøgleværdier.
  • Nøgleværdierne hjælper med at sortere og identificere elementer entydigt.
  • De kortlagte værdier hjælper med at gemme indhold, der er knyttet til nøglen.
  • C ++ map gemmer unikke nøgler i sorteret rækkefølge.
  • For at arbejde med C ++ - kort opretter vi en iterator, der skal gentages over elementerne.
  • Med iteratoren kan vi udføre opgaver som at søge og slette emner fra kortet.