Wat is std :: map?
In C ++ is een MAP een associatieve container waarin items in een toegewezen vorm worden opgeslagen. Elk item op de kaart is samengesteld uit een sleutelwaarde en een toegewezen waarde. Twee toegewezen waarden kunnen niet dezelfde sleutelwaarden hebben.
De sleutelwaarden zijn goed voor het uniek sorteren en identificeren van elementen. De toegewezen waarden zijn voor het opslaan van inhoud die bij de sleutel hoort. De twee kunnen in typen verschillen, maar het ledentype combineert ze via een paartype dat beide combineert.
In deze C ++ tutorial leer je:
- Wat is std :: map?
- Waarom std :: map gebruiken?
- Syntaxis:
- Soorten leden:
- Ingebouwde functies
- Itereren over kaartelementen
- Gegevens invoegen in std :: map:
- Zoeken op een kaart
- Gegevens verwijderen van een kaart
Waarom std :: map gebruiken?
Hier zijn redenen om kaart te gebruiken:
- std :: map slaat unieke sleutels alleen op in gesorteerde volgorde op basis van de gekozen sorteercriteria.
- Het is gemakkelijk en sneller om met de sleutel naar elementen te zoeken.
- Aan elke sleutel is slechts één element bevestigd.
- std :: map kan worden gebruikt als een associatieve array.
- std :: map is implementeerbaar met binaire bomen (gebalanceerd).
Syntaxis:
Gebruik deze syntaxis om std :: map te declareren:
std::mapmap_name;
- Het key_datatype geeft het datatype van de kaartsleutels aan.
- Het waarde_datatype geeft het datatype aan van de waarden die overeenkomen met de kaartsleutels.
- De map_name is de naam van de kaart.
Bijvoorbeeld:
mapmy_map;
We hebben een kaart gedeclareerd met de naam my_map. De kaart zal een string hebben als sleutel datatypes en integer als waarden datatype.
Soorten leden:
De lidfuncties kunnen de volgende lidtypen gebruiken als parameter of als retourtype:
- key_type: Key (De eerste parameter in de sjabloon)
- mapped_type: T (De tweede parameter in de sjabloon)
- key_compare: Compare (De derde parameter in de sjabloon)
- allocator_type: Alloc (De vierde parameter in de sjabloon)
- waarde_type: paar
- value_compare: geneste functieklasse voor het vergelijken van elementen
- reference: allocator_type :: reference
- const_reference: allocator_type :: const_reference
- pointer: allocator_type :: pointer
- const_pointer: allocator_type :: const_pointer
- iterator: een bidirectionele iterator naar het waarde_type
- const_iterator: een bidirectionele iterator naar het const value_type
- reverse_iterator: een reverse iterator
- const_reverse_iterator: een constante omgekeerde iterator
- verschil_type: ptrdiff_t
- size_type: size_t
Ingebouwde functies
std :: map wordt geleverd met ingebouwde functies. Enkele hiervan zijn:
- begin () - Deze functie retourneert de iterator naar het eerste item van de kaart.
- size () - Deze functie retourneert het aantal items op een kaart.
- empty () - Deze functie retourneert een Booleaanse waarde die aangeeft of een kaart leeg is.
- insert (pair (key, value)) - Deze functie voegt een nieuw sleutel / waarde-paar in een kaart in.
- find (val) - Deze functie geeft de iterator aan het val-element als het wordt gevonden. Anders wordt m.end () geretourneerd.
- Wissen (iteratorpositie) - Deze functie verwijdert het item op de positie die door de iterator wordt aangegeven.
- erase (const g) - Deze functie verwijdert sleutelwaarde g van een kaart.
- Clear () - Deze functie verwijdert alle items van een kaart.
Itereren over kaartelementen
U kunt de kaartelementen herhalen. We hoeven alleen maar een iterator te maken en deze hiervoor te gebruiken. Bijvoorbeeld:
Voorbeeld 1:
#include#include #include
Uitgang:
Hier is een screenshot van de code:
Code Verklaring:
- Neem het iostream-headerbestand op in onze code om de functies ervan te gebruiken.
- Voeg het string header-bestand toe aan onze code om de functies ervan te gebruiken.
- Neem het kaartkopbestand op in onze code om de functies ervan te gebruiken.
- Neem de std-naamruimte op in onze code om de klassen ervan te gebruiken zonder deze aan te roepen.
- Roep de functie main () aan. De {markeert het begin van de hoofdtekst van de functie.
- Maak een kaart met de naam Studenten, waarbij de sleutels gehele getallen zijn en de waarden tekenreeksen.
- Voeg waarden in op de kaart Studenten. Een sleutel van 200 en een waarde van Alice worden in de kaart ingevoegd.
- Voeg waarden in op de kaart Studenten. Een sleutel van 201 en een waarde van John wordt in de kaart ingevoegd.
- Gebruik de functie size () om de grootte van de kaart met de naam Students te krijgen. Dit zou een 2 moeten retourneren.
- Druk wat tekst af op de console.
- Gebruik een for-lus om een iterator met de naam te maken om de elementen van de kaart met de naam Students te herhalen.
- Druk de waarden van de kaart Studenten af op de console.
- Einde van de body van de for-lus.
- Einde van de hoofdtekst van de functie main ().
Gegevens invoegen in std :: map
U kunt items in std :: map invoeren met de functie insert (). Onthoud dat de std :: map-sleutels uniek moeten zijn.
Het controleert dus eerst of elke sleutel op de kaart aanwezig is. Als het aanwezig is, wordt het item niet ingevoegd, maar retourneert het de iterator voor het bestaande item. Als het niet aanwezig is, wordt het item ingevoegd.
De functie heeft de volgende variaties:
- insert (pair) - met deze variatie wordt een sleutel / waarde-paar in de kaart ingevoegd.
- insert (start_itr, end_itr) - met deze variatie worden de items ingevoegd binnen het bereik gedefinieerd door start_itr en end_itr van een andere kaart.
De functie insert_or_assing () werkt op dezelfde manier als de functie insert (), maar als de opgegeven sleutel al in de map bestaat, wordt de waarde ervan gewijzigd.
Voorbeeld 2:
#include
Uitgang:
Hier is een screenshot van de code:
Code Verklaring:
- Neem het kaartkopbestand op in onze code om de functies ervan te gebruiken.
- Neem het iostream-headerbestand op in onze code om de functies ervan te gebruiken.
- Neem de std-naamruimte op in onze code om de klassen ervan te gebruiken zonder deze aan te roepen.
- Roep de functie main () aan. De {markeert het begin van de hoofdtekst van de functie.
- Maak een kaart met de naam m waar de sleutels gehele getallen zijn en de waarden gehele getallen. Er zijn drie vermeldingen op de kaart gemaakt.
- Voeg een nieuw item in de kaart m. Een sleutel van 5 en een waarde van 6 worden in de kaart ingevoegd.
- Proberen toegang te krijgen tot een reeds bestaande sleutel. Aangezien de sleutel 1 al op de kaart bestaat, wordt de invoer niet uitgevoerd.
- Gebruik de functie insert_or_assign () om een bestaand item in te voegen of te wijzigen. Omdat de sleutel 1 al bestaat, wordt de waarde ervan gewijzigd in 6.
- Druk wat tekst af op de console. Het teken "\ t" creëert een horizontale spatie terwijl het teken "\ n" de muiscursor naar de volgende regel verplaatst.
- Gebruik een for-lus om een iterator met de naam itr te maken om de elementen van de kaart met de naam m te herhalen.
- Druk de waarden van de kaart m af op de console. Het teken "\ t" creëert een horizontale spatie tussen elke toets en de bijbehorende waarde. In tegenstelling hiermee verplaatst het teken "\ n" de muiscursor naar de volgende regel na elke iteratie.
- Einde van de body van de for a loop.
- Het programma moet waarde teruggeven na succesvolle voltooiing.
- Einde van de hoofdtekst van de functie main ().
Zoeken op een kaart
We kunnen de functie find () gebruiken om met hun toetsen naar elementen in een kaart te zoeken. Als de sleutel niet wordt gevonden, retourneert de functie std :: map :: end. Anders wordt een iterator van het gezochte element geretourneerd.
Voorbeeld 2:
#include#include #include
Uitgang:
Hier is een screenshot van de code:
Code Verklaring:
- Neem het iostream-headerbestand op in onze code om de functies ervan te gebruiken zonder fouten te krijgen.
- Voeg het string header-bestand toe aan onze code om de functies ervan te gebruiken zonder fouten te krijgen.
- Voeg het kaartkopbestand toe aan onze code om de functies ervan te gebruiken zonder fouten te krijgen.
- Neem de std-naamruimte op in onze code om de klassen ervan te gebruiken zonder deze aan te roepen.
- Roep de functie main () aan. De {markeert het begin van de hoofdtekst van de functie main ().
- Maak een kaart met de naam Studenten waarvan de sleutels gehele getallen en waardenreeksen zijn.
- Voeg waarden in op de kaart Studenten. Een sleutel van 200 en een waarde van Alice worden in de kaart ingevoegd.
- Voeg waarden in op de kaart Studenten. Een sleutel van 201 en een waarde van John wordt in de kaart ingevoegd.
- Zoek naar de waarde die is gekoppeld aan een sleutel van 201.
- Gebruik een if-instructie om te controleren of de waarde voor de sleutel is gevonden.
- Druk de waarde van de sleutel af naast wat tekst op de console.
- Einde van de tekst van de if-instructie.
- Einde van de hoofdtekst van de functie main ().
Gegevens verwijderen van een kaart
We kunnen de functie erase () gebruiken om een waarde van een kaart te verwijderen. We maken eenvoudig een iterator die verwijst naar het element dat moet worden verwijderd. De iterator wordt vervolgens doorgegeven aan de functie erase ().
Voorbeeld 3:
#include#include #include
Uitgang:
Hier is een screenshot van de code:
Code Verklaring:
- Neem het iostream-headerbestand op in onze code om de functies ervan te gebruiken.
- Voeg het string header-bestand toe aan onze code om de functies ervan te gebruiken.
- Neem het kaartkopbestand op in onze code om de functies ervan te gebruiken.
- Neem de std-naamruimte op in onze code om de klassen ervan te gebruiken zonder deze aan te roepen.
- Roep de functie main () aan. De {markeert het begin van de hoofdtekst van de functie main ().
- Maak een kaart met de naam my_map waarvan de sleutels tekenreeksen en gehele getallen zijn.
- Voeg waarden in de map my_map in. Een sleutel van Koe en een waarde van 1 worden in de kaart ingevoegd.
- Voeg waarden in de map my_map in. Een sleutel van Cat en een waarde van 2 worden in de kaart ingevoegd.
- Voeg een waarde 3 toe aan de map my_map met een sleutel van een leeuw.
- Maak een iterator om de map my_map te herhalen op zoek naar de key cat.
- Verwijder het element waarnaar de iterator verwijst.
- Gebruik een iterator om de elementen van de map my_map van het begin tot het einde te herhalen.
- Print de inhoud van de map my_map op de console.
- Het programma moet uitvoer teruggeven na succesvolle voltooiing.
- Einde van de hoofdtekst van de functie main ().
Overzicht:
- Een kaart is een associatieve container waarin items in een toegewezen vorm worden opgeslagen.
- Elk item op de kaart heeft een sleutelwaarde en een toegewezen waarde.
- Op een kaart kunnen twee toegewezen waarden geen sleutelwaarden delen.
- De sleutelwaarden helpen bij het uniek sorteren en identificeren van elementen.
- De toegewezen waarden helpen bij het opslaan van inhoud die bij de sleutel hoort.
- C ++ - kaart slaat unieke sleutels op in gesorteerde volgorde.
- Om met C ++ map te werken, maken we een iterator om de elementen te herhalen.
- Met de iterator kunnen we taken uitvoeren zoals het zoeken naar en verwijderen van items van de kaart.