Kaart in C++ Standaardsjabloonbibliotheek (STL)

Wat is Kaart in C++? Syntaxis

In C++, een MAP is een associatieve container waarin items in een toegewezen vorm worden opgeslagen. Elk item op de kaart bestaat uit een sleutelwaarde en een toegewezen waarde. Twee toegewezen waarden kunnen niet dezelfde sleutelwaarden delen.

De sleutelwaarden zijn goed voor het uniek sorteren en identificeren van elementen. De toegewezen waarden zijn bedoeld voor het opslaan van inhoud die aan de sleutel is gekoppeld. De twee kunnen qua typen verschillen, maar het lidtype combineert ze via een paartype dat beide combineert.

Waarom std::map gebruiken?

Hier zijn redenen om de kaart te gebruiken:

  • std:: map slaat unieke sleutels alleen op in gesorteerde volgorde op basis van gekozen sorteercriteria.
  • Met de sleutel kunt u gemakkelijker en sneller naar elementen zoeken.
  • Aan elke sleutel is slechts één element bevestigd.
  • std::map kan worden gebruikt als een associatieve array.
  • std::map is implementeerbaar met behulp van binaire bomen (gebalanceerd).

Syntaxis

Gebruik deze syntaxis om std::map te declareren:

std::map<key_datatype, value_datatype>map_name; 
  • De key_datatype geeft het gegevenstype van de kaartsleutels aan.
  • De value_datatype geeft het gegevenstype aan van de waarden die overeenkomen met de kaartsleutels.
  • De map_name is de naam van de kaart.

Bijvoorbeeld:

map<string, int> my_map; 

We hebben een kaart met de naam aangegeven my_map. De kaart heeft een string als sleutel datatypes en integer as waarden data type.

Soorten leden

De lidfuncties kunnen de volgende lidtypen gebruiken als parameters of retourtype:

  • sleutel type: Sleutel (de eerste parameter in de sjabloon)
  • toegewezen_type: T (de tweede parameter in de sjabloon)
  • key_compare: Vergelijken (de derde parameter in de sjabloon)
  • allocator_type: Alloc (de vierde parameter in de sjabloon)
  • waarde type: paar
  • waarde_vergelijk: Geneste functieklasse voor het vergelijken van elementen
  • referentie: allocator_type::referentie
  • const_referentie: allocator_type::const_referentie
  • wijzer: allocator_type::wijzer
  • const_pointer: allocator_type::const_pointer
  • iterator: een bidirectionele iterator voor het waarde_type
  • const_iterator: een bidirectionele iterator voor de const waarde_type
  • omgekeerde_iterator: een omgekeerde iterator
  • const_reverse_iterator: een constante omgekeerde iterator
  • verschiltype: ptrdiff_t
  • maat_type: maat_t

Ingebouwde functies van std::map

std::map wordt geleverd met ingebouwde functies. Sommige hiervan omvatten:

  • beginnen() - Deze functie retourneert de iterator naar het eerste item van de kaart.
  • maat() -Deze functie retourneert het aantal items op een kaart.
  • leeg() -Deze functie retourneert een Booleaanse waarde die aangeeft of een kaart leeg is.
  • insert( paar(sleutel, waarde)) – Deze functie voegt een nieuw sleutelwaardepaar in een kaart in.
  • vind(waarde) – Deze functie geeft de iterator aan het val-element als deze gevonden is. Anders retourneert het m.end().
  • Wissen (iteratorpositie) – Deze functie verwijdert het item op de positie die door de iterator wordt aangegeven.
  • wissen(const g) – Deze functie verwijdert sleutelwaarde g van een kaart.
  • Duidelijk () -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 <iostream>
#include <string>
#include <map> 

using namespace std;
int main() {

	map<int, string> Students;

	Students.insert(std::pair<int, string>(200, "Alice"));

	Students.insert(std::pair<int, string>(201, "John"));

	cout << "Map size is: " << Students.size() << endl;

	cout << endl << "Default map Order is: " << endl;

	for (map<int, string>::iterator it = Students.begin(); it != Students.end(); ++it) {

		cout << (*it).first << ": " << (*it).second << endl;
	}
}

Output:

Itereren over kaartelementen

Hier is een screenshot van de code:

Itereren over kaartelementen

Code Verklaring:

  1. Neem het iostream-headerbestand op in onze code om de functies ervan te gebruiken.
  2. Neem het string-headerbestand op in onze code om de functies ervan te gebruiken.
  3. Neem het kaartheaderbestand op in onze code om de functies ervan te gebruiken.
  4. Neem de std-naamruimte op in onze code om de klassen ervan te gebruiken zonder deze aan te roepen.
  5. Bel de main() functie. De { markeert het begin van de hoofdtekst van de functie.
  6. Maak een kaart met de naam Studenten, waarbij de sleutels gehele getallen zijn en de waarden tekenreeksen.
  7. Waarden invoegen in de kaart Studenten. Een sleutel van 200 en een waarde van Alice worden in de kaart ingevoegd.
  8. Waarden invoegen in de kaart Studenten. Een sleutel van 201 en een waarde van John worden in de kaart ingevoegd.
  9. Gebruik de size() functie om de grootte van de kaart met de naam Studenten te verkrijgen. Dit zou een 2 moeten opleveren.
  10. Druk wat tekst af op de console.
  11. Gebruik een for-lus om een ​​iterator te maken met de naam Studenten, om de elementen van de kaart met de naam Studenten te doorlopen.
  12. Print de waarden van de kaart Studenten op de console.
  13. Einde van de hoofdtekst van de for-lus.
  14. Einde van het lichaam van de main() functie.

Gegevens invoegen in std::map

U kunt items in std::map invoeren met behulp van de insert() functie. Onthoud dat de std::map-sleutels uniek moeten zijn.

Er wordt dus eerst gecontroleerd of elke sleutel aanwezig is op de kaart. Als deze aanwezig is, wordt het item niet ingevoegd, maar wordt de iterator voor het bestaande item geretourneerd. Als deze niet aanwezig is, wordt de vermelding ingevoegd.

De functie kent de volgende variaties:

  • invoegen(paar) – bij deze variatie wordt een sleutel-waardepaar in de kaart ingevoegd.
  • invoegen(begin_itr, eind_itr) – bij deze variant worden de gegevens ingevoegd binnen het bereik gedefinieerd door start_itr en end_itr vanuit een andere kaart.

De insert_or_assing() functie werkt op dezelfde manier als insert() functie, maar als de gegeven sleutel al in de kaart bestaat, zal de waarde ervan worden gewijzigd.

Voorbeeld 2:

#include <map>
#include <iostream>

using namespace std;

int main() {

	map<int, int> 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;
}

Output:

Gegevens invoegen in std::map

Hier is een screenshot van de code:

Gegevens invoegen in std::map

Code Verklaring:

  1. Neem het kaartheaderbestand op in onze code om de functies ervan te gebruiken.
  2. Neem het iostream-headerbestand op in onze code om de functies ervan te gebruiken.
  3. Neem de std-naamruimte op in onze code om de klassen ervan te gebruiken zonder deze aan te roepen.
  4. Bel de main() functie. De { markeert het begin van de hoofdtekst van de functie.
  5. Maak een kaart met de naam m, waarbij de sleutels gehele getallen zijn en de waarden gehele getallen zijn. Er zijn drie vermeldingen op de kaart aangebracht.
  6. Voeg een nieuw item in de kaart in m. Een sleutel van 5 en een waarde van 6 worden in de kaart ingevoegd.
  7. Er wordt geprobeerd een invoer te maken in een reeds bestaande sleutel. Omdat sleutel 1 al op de kaart bestaat, wordt de invoer niet uitgevoerd.
  8. De insert_or_assign() functie om een ​​bestaand item in te voegen of te wijzigen. Omdat de sleutel 1 al bestaat, wordt de waarde ervan gewijzigd in 6.
  9. 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.
  10. Gebruik een for loop om een ​​iterator met de naam itr te maken om de elementen van de kaart met de naam m te herhalen.
  11. 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. Het teken “\n” daarentegen verplaatst de muiscursor na elke iteratie naar de volgende regel.
  12. Einde van het lichaam van de lus.
  13. Het programma moet waarde retourneren na succesvolle voltooiing.
  14. Einde van het lichaam van de main() functie.

Zoeken op een kaart

We kunnen de find() functie om te zoeken naar elementen in een map op basis van hun sleutels. Als de sleutel niet wordt gevonden, retourneert de functie std::map::end. Anders wordt een iterator van het gezochte element geretourneerd.

Voorbeeld 3:

#include <iostream>
#include <string>
#include <map> 
using namespace std;
int main() {
	map<int, string> Students;
	Students.insert(std::pair<int, string>(200, "Alice"));
	Students.insert(std::pair<int, string>(201, "John"));
	std::map<int, string>::iterator it = Students.find(201);
	if (it != Students.end()) {
		std::cout << endl << "Key 201 has the value: => "<< Students.find(201)->second << '\n';
	}
}

Output:

Zoeken op een kaart

Hier is een screenshot van de code:

Zoeken op een kaart

Code Verklaring:

  1. Neem het iostream-headerbestand op in onze code om de functies ervan te gebruiken zonder fouten te krijgen.
  2. Neem het string-headerbestand op in onze code om de functies ervan te gebruiken zonder fouten te krijgen.
  3. Neem het kaartheaderbestand op in onze code om de functies ervan te gebruiken zonder fouten te krijgen.
  4. Neem de std-naamruimte op in onze code om de klassen ervan te gebruiken zonder deze aan te roepen.
  5. Bel de main() functie. De { markeert het begin van de hoofdtekst van main() functie.
  6. Maak een kaart met de naam Studenten, waarvan de sleutels gehele getallen en waardenreeksen zijn.
  7. Waarden invoegen in de kaart Studenten. Een sleutel van 200 en een waarde van Alice worden in de kaart ingevoegd.
  8. Waarden invoegen in de kaart Studenten. Een sleutel van 201 en een waarde van John worden in de kaart ingevoegd.
  9. Zoek naar de waarde die is gekoppeld aan een sleutel van 201.
  10. Gebruik een if-statement om te controleren of de waarde voor de sleutel wordt gevonden.
  11. Druk de waarde van de sleutel af naast wat tekst op de console.
  12. Einde van de hoofdtekst van de if-instructie.
  13. Einde van het lichaam van de main() functie.

Gegevens van een kaart verwijderen

We kunnen de erase() functie om een ​​waarde uit een kaart te verwijderen. We maken eenvoudigweg een iterator die verwijst naar het element dat moet worden verwijderd. De iterator wordt vervolgens doorgegeven aan de erase() functie.

Voorbeeld 4:

#include <iostream>
#include <string>
#include <map>

using namespace std;
int main() {

	map<std::string, int> my_map;

	my_map.insert(std::make_pair("cow", 1));

	my_map.insert(std::make_pair("cat", 2));

	my_map["lion"] = 3;

	map<std::string, int>::iterator it = my_map.find("cat");

	my_map.erase(it);

	for (map<string, int>::iterator it = my_map.begin(); it != my_map.end(); ++it)

		cout << (*it).first << ": " << (*it).second << endl;

  return 0;
}

Output:

Gegevens van een kaart verwijderen

Hier is een screenshot van de code:

Gegevens van een kaart verwijderen

Code Verklaring:

  1. Neem het iostream-headerbestand op in onze code om de functies ervan te gebruiken.
  2. Neem het string-headerbestand op in onze code om de functies ervan te gebruiken.
  3. Neem het kaartheaderbestand op in onze code om de functies ervan te gebruiken.
  4. Neem de std-naamruimte op in onze code om de klassen ervan te gebruiken zonder deze aan te roepen.
  5. Bel de main() functie. De { markeert het begin van de hoofdtekst van de main() functie.
  6. Maak een kaart met de naam my_map, waarvan de sleutels strings en gehele waarden zijn.
  7. Voeg waarden in de kaart my_map in. Een sleutel Koe en een waarde van 1 worden in de kaart ingevoegd.
  8. Voeg waarden in de kaart my_map in. Een sleutel van Cat en een waarde van 2 worden in de kaart ingevoegd.
  9. Voeg een waarde 3 toe aan de kaart my_map met een sleutel van een leeuw.
  10. Maak een iterator om de kaart my_map te doorlopen op zoek naar de sleutelkat.
  11. Verwijder het element waarnaar de iterator verwijst.
  12. Gebruik een iterator om de elementen van de kaart my_map van het begin tot het einde te herhalen.
  13. Druk de inhoud van de kaart my_map op de console af.
  14. Het programma moet uitvoer retourneren na succesvolle voltooiing.
  15. Einde van het lichaam van de main() functie.

Samenvatting

  • 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.
  • In 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 aan de sleutel is gekoppeld.
  • C++ kaart slaat unieke sleutels op in gesorteerde volgorde.
  • Werken met C++ kaart, creëren we een iterator om de elementen te herhalen.
  • Met de iterator kunnen we taken uitvoeren zoals het zoeken en verwijderen van items op de kaart.

Vat dit bericht samen met: