Karta i C ++ Standardmallbibliotek (STL) med exempel

Innehållsförteckning:

Anonim

Vad är STD :: karta?

I C ++ är en MAP en associerande behållare som lagrar objekt i en mappad form. Varje objekt på kartan består av nyckel-värde och ett mappat värde. Två mappade värden kan inte dela samma nyckelvärden.

Nyckelvärdena är bra för att sortera och identifiera element unikt. De mappade värdena är för lagring av innehåll som är associerat med nyckeln. De två kan skilja sig åt i olika typer, men medlemstypen kombinerar dem via en partyp som kombinerar båda.

I denna C ++ -handledning lär du dig:

  • Vad är STD :: karta?
  • Varför använda std :: map?
  • Syntax:
  • Medlemstyper:
  • Inbyggda funktioner
  • Iterera över kartelement
  • Infoga data i std :: karta:
  • Söka på en karta
  • Ta bort data från en karta

Varför använda std :: map?

Här finns anledningar till att använda karta:

  • std :: map lagrar unika nycklar endast i sorterad ordning baserat på valda sorteringskriterier.
  • Det är enkelt och snabbare att söka efter element med hjälp av nyckeln.
  • Endast ett element är anslutet till varje nyckel.
  • std :: map kan användas som en associerande matris.
  • std :: map kan implementeras med binära träd (balanserad).

Syntax:

För att förklara std :: map, använd denna syntax:

std::mapmap_name;
  • Key_datatype betecknar datatypen för kartnycklarna.
  • Value_datatype betecknar datatypen för de värden som motsvarar kartnycklarna.
  • Kartnamnet är namnet på kartan.

Till exempel:

map my_map;

Vi förklarade en karta med namnet my_map. Kartan har en sträng som nyckeldatatyper och heltal som värden datatyp.

Medlemstyper:

Medlemsfunktionerna kan använda följande medlemmstyper som antingen parametrar eller returtyp:

  • key_type: Key (Den första parametern i mallen)
  • mapped_type: T (Den andra parametern i mallen)
  • key_compare: Compare (Den tredje parametern i mallen)
  • allocator_type: Alloc (den fjärde parametern i mallen)
  • value_type: pair
  • value_compare: Kapslad funktionsklass för att jämföra element
  • referens: allocator_type :: referens
  • const_reference: allocator_type :: const_reference
  • pekare: allocator_type :: pekare
  • const_pointer: allocator_type :: const_pointer
  • iterator: en dubbelriktad iterator till value_type
  • const_iterator: en dubbelriktad iterator till const value_type
  • reverse_iterator: en omvänd iterator
  • const_reverse_iterator: en konstant omvänd iterator
  • skillnadstyp: ptrdiff_t
  • size_type: size_t

Inbyggda funktioner

std :: map levereras med inbyggda funktioner. Några av dessa inkluderar:

  • begin () - Denna funktion återställer iteratorn till det första objektet på kartan.
  • storlek () - Den här funktionen returnerar antalet objekt på en karta.
  • tom () - Den här funktionen returnerar ett booleskt värde som anger om en karta är tom.
  • infoga (par (nyckel, värde)) - Denna funktion infogar nytt nyckel-värdepar till en karta.
  • hitta (val) - Denna funktion ger iteratorn till valelementet om det finns. Annars kommer den att returnera m.end ().
  • Radera (iteratorposition) - Den här funktionen tar bort objektet i positionen som iteratorn pekar på.
  • radera (const g) - Denna funktion tar bort nyckel-värde g från en karta.
  • Rensa () - Denna funktion tar bort alla objekt från en karta.

Iterera över kartelement

Du kan itera över kartelementen. Vi behöver helt enkelt skapa en iterator och använda den för detta. Till exempel:

Exempel 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:

Här är en skärmdump av koden:

Kodförklaring:

  1. Inkludera iostream-huvudfilen i vår kod för att använda dess funktioner.
  2. Inkludera stränghuvudfilen i vår kod för att använda dess funktioner.
  3. Inkludera karthuvudfilen i vår kod för att använda dess funktioner.
  4. Inkludera std-namnområdet i vår kod för att använda dess klasser utan att kalla det.
  5. Ring huvudfunktionen (). {Markerar början på kroppens funktion.
  6. Skapa en karta med namnet Elever där nycklarna kommer att vara heltal och värdena är strängar.
  7. Infoga värden i kartan Studenter. En nyckel på 200 och ett värde på Alice kommer att införas på kartan.
  8. Infoga värden i kartan Studenter. En nyckel på 201 och ett värde på John infogas på kartan.
  9. Använd funktionen storlek () för att få storleken på kartan som heter Studenter. Detta ska returnera en 2.
  10. Skriv ut lite text på konsolen.
  11. Använd en for-loop för att skapa en iterator som heter den för att itera över elementen på kartan med namnet Students.
  12. Skriv ut värdena på kartstudenterna på konsolen.
  13. Slutet på for-loopens kropp.
  14. Slutet på huvudfunktionens () kropp.

Infoga data i std :: karta

Du kan skriva in objekt i std :: map med funktionen insert (). Kom ihåg att std :: kartnycklarna måste vara unika.

Så det kontrollerar först om varje nyckel finns på kartan. Om den är närvarande kommer posten inte att infogas, men den returnerar iteratorn för den befintliga posten. Om den inte är närvarande infogas posten.

Funktionen har följande varianter:

  • infoga (par) - med denna variant infogas ett nyckel-värdepar i kartan.
  • infoga (start_itr, end_itr) - med denna variant kommer posterna att infogas inom det intervall som definieras av start_itr och end_itr från en annan karta.

Den insert_or_assing () funktionen fungerar på samma sätt som insats funktion (), men om den givna nyckeln redan finns på kartan, kommer dess värde ändras.

Exempel 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:

Här är en skärmdump av koden:

Kodförklaring:

  1. Inkludera karthuvudfilen i vår kod för att använda dess funktioner.
  2. Inkludera iostream-huvudfilen i vår kod för att använda dess funktioner.
  3. Inkludera std-namnområdet i vår kod för att använda dess klasser utan att kalla det.
  4. Ring huvudfunktionen (). {Markerar början på kroppens funktion.
  5. Skapa en karta med namnet m där nycklarna kommer att vara heltal och värdena kommer att vara heltal. Tre poster har gjorts på kartan.
  6. Infoga en ny post på kartan m. En nyckel på 5 och ett värde på 6 kommer att införas på kartan.
  7. Försöker göra en post till en redan befintlig nyckel. Eftersom nyckel 1 redan finns på kartan kommer posten inte att göras.
  8. Använd funktionen insert_or_assign () för att infoga eller ändra en befintlig post. Eftersom nyckeln 1 redan finns kommer dess värde att ändras till 6.
  9. Skriv ut lite text på konsolen. Tecknet "\ t" skapar ett horisontellt mellanslag medan "\ n" -tecknet flyttar muspekaren till nästa rad.
  10. Använd en for-loop för att skapa en iterator som heter itr för att itera över elementen på kartan med namnet m.
  11. Skriv ut värdena på kartan m på konsolen. Tecknet "\ t" skapar ett horisontellt mellanrum mellan varje tangent och dess motsvarande värde. Däremot flyttar tecknet "\ n" muspekaren till nästa rad efter varje iteration.
  12. Slutet på kroppen för en slinga.
  13. Programmet måste returnera värde när det är klart.
  14. Slutet på huvudfunktionens () kropp.

Söka på en karta

Vi kan använda sökfunktionen () för att söka efter element på en karta med deras nycklar. Om nyckeln inte hittas returnerar funktionen std :: map :: end. Annars returneras en iterator för det sökta elementet.

Exempel 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:

Här är en skärmdump av koden:

Kodförklaring:

  1. Inkludera iostream-huvudfilen i vår kod för att använda dess funktioner utan att få fel.
  2. Inkludera stränghuvudfilen i vår kod för att använda dess funktioner utan att få fel.
  3. Inkludera karthuvudfilen i vår kod för att använda dess funktioner utan att få fel.
  4. Inkludera std-namnområdet i vår kod för att använda dess klasser utan att kalla det.
  5. Ring huvudfunktionen (). {Markerar början på huvudfunktionen ().
  6. Skapa en karta med namnet Elever vars nycklar kommer att vara heltal och värderingssträngar.
  7. Infoga värden i kartan Studenter. En nyckel på 200 och ett värde på Alice kommer att införas på kartan.
  8. Infoga värden i kartan Studenter. En nyckel på 201 och ett värde på John infogas på kartan.
  9. Leta efter värdet associerat med en nyckel på 201.
  10. Använd en if-sats för att kontrollera om värdet för nyckeln finns.
  11. Skriv ut värdet på nyckeln tillsammans med lite text på konsolen.
  12. Slut på kroppen av if-uttalandet.
  13. Slutet på huvudfunktionens () kropp.

Ta bort data från en karta

Vi kan använda radera () -funktionen för att ta bort ett värde från en karta. Vi skapar helt enkelt en iterator som pekar på det element som ska raderas. Iteratorn skickas sedan till funktionen radera ().

Exempel 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:

Här är en skärmdump av koden:

Kodförklaring:

  1. Inkludera iostream-huvudfilen i vår kod för att använda dess funktioner.
  2. Inkludera stränghuvudfilen i vår kod för att använda dess funktioner.
  3. Inkludera karthuvudfilen i vår kod för att använda dess funktioner.
  4. Inkludera std-namnområdet i vår kod för att använda dess klasser utan att kalla det.
  5. Ring huvudfunktionen (). {Markerar början på huvudfunktionen ().
  6. Skapa en karta med namnet my_map vars nycklar är strängar och värden som heltal.
  7. Infoga värden i kartan my_map. En nyckel till ko och värdet 1 kommer att införas på kartan.
  8. Infoga värden i kartan my_map. En nyckel till Cat och värdet 2 kommer att införas på kartan.
  9. Lägg till ett värde 3 på kartan my_map med en lejonnyckel.
  10. Skapa en iterator för att itera över kartan my_map och leta efter nyckelkatten.
  11. Ta bort det element som iteratorn pekar på.
  12. Använd en iterator för att itera över elementen på kartan my_map från början till slutet.
  13. Skriv ut innehållet på kartan my_map på konsolen.
  14. Programmet måste returnera produktionen när det är klart.
  15. Slutet på huvudfunktionens () kropp.

Sammanfattning:

  • En karta är en associerande behållare som lagrar objekt i en mappad form.
  • Varje objekt på kartan har ett nyckelvärde och ett mappat värde.
  • På en karta kan två mappade värden inte dela nyckelvärden.
  • Nyckelvärdena hjälper till att sortera och identifiera element unikt.
  • De mappade värdena hjälper till att lagra innehåll som är associerat med nyckeln.
  • C ++ map lagrar unika nycklar i sorterad ordning.
  • För att arbeta med C ++ karta skapar vi en iterator för att itera över elementen.
  • Med iteratorn kan vi utföra uppgifter som att söka och ta bort objekt från kartan.