Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Industrial programming >> C Taal

Kaart in C++ Standard Template Library (STL) met afdrukvoorbeeld

Wat is std::map?

In C++, een MAP is een associatieve container die items in een toegewezen vorm opslaat. 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 op unieke wijze sorteren en identificeren van elementen. De toegewezen waarden zijn voor het opslaan van inhoud die aan de sleutel is gekoppeld. De twee kunnen verschillen in typen, maar het lidtype combineert ze via een paartype dat beide combineert.

In deze C++ tutorial leer je:

  • Wat is std::map?
  • Waarom std::map gebruiken?
  • Syntaxis:
  • Typen leden:
  • Ingebouwde functies
  • Itereren over kaartelementen
  • Gegevens invoegen in std::map
  • Zoeken op een kaart
  • Gegevens van een kaart verwijderen

Waarom std::map gebruiken?

Hier zijn redenen om kaart te gebruiken:

  • std::map slaat unieke sleutels alleen op in gesorteerde volgorde op basis van gekozen sorteercriteria.
  • Het is gemakkelijk en sneller om naar elementen te zoeken met de sleutel.
  • Er is slechts één element aan elke sleutel gekoppeld.
  • 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; 
  • Het key_datatype geeft het datatype van de kaartsleutels aan.
  • Het value_datatype geeft het datatype 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 my_map gedeclareerd. De kaart heeft een tekenreeks als sleutel datatypes en integer als waarden gegevenstype.

Typen leden:

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

  • key_type: Sleutel (de eerste parameter in de sjabloon)
  • mapped_type: T (De tweede parameter in de sjabloon)
  • key_compare: Vergelijk (De derde parameter in de sjabloon)
  • allocator_type: Alloc (De vierde parameter in de sjabloon)
  • value_type: paar
  • value_compare: Geneste functieklasse voor het vergelijken van elementen
  • referentie: allocator_type::referentie
  • const_reference: allocator_type::const_reference
  • aanwijzer: allocator_type::pointer
  • const_pointer: allocator_type::const_pointer
  • iterator: een bidirectionele iterator naar het value_type
  • const_iterator: een bidirectionele iterator naar het const value_type
  • reverse_iterator: een omgekeerde iterator
  • const_reverse_iterator: een constante omgekeerde iterator
  • difference_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.
  • 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( pair(key, value))- Deze functie voegt een nieuw sleutel-waardepaar toe aan een kaart.
  • 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 door de iterator aangewezen positie.
  • wissen(const g) – Deze functie verwijdert sleutel-waarde g van een kaart.
  • Wissen ()- 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;
	}
}

Uitvoer:

Hier is een screenshot van de code:

Code uitleg:

  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. Voeg het kaartkoptekstbestand toe aan onze code om de functies ervan te gebruiken.
  4. Neem de std-naamruimte op in onze code om de klassen te gebruiken zonder deze aan te roepen.
  5. Roep de functie main() aan. De { markeert het begin van de hoofdtekst van de functie.
  6. Maak een map met de naam Studenten, waarbij de sleutels gehele getallen zijn en de waarden tekenreeksen.
  7. Voeg waarden in op de kaart Studenten. Een sleutel van 200 en een waarde van Alice worden in de kaart ingevoegd.
  8. Voeg waarden in op de kaart Studenten. Een sleutel van 201 en een waarde van John worden in de kaart ingevoegd.
  9. Gebruik de functie size() om de grootte van de map met de naam Studenten te krijgen. Dit zou een 2 moeten opleveren.
  10. Druk wat tekst af op de console.
  11. Gebruik een for-lus om een ​​iterator met de naam te maken om de elementen van de map met de naam Students te herhalen.
  12. Druk de waarden van de kaart Studenten af ​​op de console.
  13. Einde van de hoofdtekst van de for-lus.
  14. 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 variant wordt een sleutel-waardepaar ingevoegd in de kaart.
  • 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 insert_or_assing() functie werkt op dezelfde manier als de functie insert(), maar als de gegeven sleutel al in de map bestaat, wordt de waarde ervan 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;
}

Uitvoer:

Hier is een screenshot van de code:

Code uitleg:

  1. Voeg het kaartkoptekstbestand toe aan 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 te gebruiken zonder deze aan te roepen.
  4. Roep de functie main() aan. De { markeert het begin van de hoofdtekst van de functie.
  5. Maak een map met de naam m waarbij de sleutels gehele getallen zijn en de waarden gehele getallen. Er zijn drie gegevens op de kaart ingevoerd.
  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. Proberen een invoer te maken in een reeds bestaande sleutel. Aangezien de sleutel 1 al op de kaart bestaat, wordt de invoer niet gedaan.
  8. De functie insert_or_assign() gebruiken om een ​​bestaande invoer in te voegen of te wijzigen. Aangezien 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-lus om een ​​iterator met de naam itr te maken om de elementen van de map 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. Daarentegen verplaatst het "\n"-teken de muiscursor na elke iteratie naar de volgende regel.
  12. Einde van de hoofdtekst van de for a-lus.
  13. Het programma moet waarde teruggeven na succesvolle voltooiing.
  14. Einde van de hoofdtekst van de functie main().

Zoeken op een kaart

We kunnen de functie find() gebruiken om met hun sleutels 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 <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';
	}
}

Uitvoer:

Hier is een screenshot van de code:

Code uitleg:

  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 te gebruiken zonder fouten te krijgen.
  3. Neem het kaartkoptekstbestand op in onze code om de functies te gebruiken zonder fouten te krijgen.
  4. Neem de std-naamruimte op in onze code om de klassen te gebruiken zonder deze aan te roepen.
  5. Roep de functie main() aan. De { markeert het begin van de hoofdtekst van de functie main().
  6. Maak een map met de naam Studenten waarvan de sleutels gehele getallen en tekenreeksen zijn.
  7. Voeg waarden in op de kaart Studenten. Een sleutel van 200 en een waarde van Alice worden in de kaart ingevoegd.
  8. Voeg waarden in op 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 is 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 de hoofdtekst van de functie main().

Gegevens van een kaart verwijderen

We kunnen de functie wissen() gebruiken om een ​​waarde van een kaart te verwijderen. We maken gewoon een iterator die verwijst naar het element dat moet worden verwijderd. De iterator wordt dan doorgegeven aan de erase() functie.

Voorbeeld 3:

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

Uitvoer:

Hier is een screenshot van de code:

Code uitleg:

  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. Voeg het kaartkoptekstbestand toe aan onze code om de functies ervan te gebruiken.
  4. Neem de std-naamruimte op in onze code om de klassen te gebruiken zonder deze aan te roepen.
  5. Roep de functie main() aan. De { markeert het begin van de hoofdtekst van de functie main().
  6. Maak een map met de naam my_map waarvan de sleutels strings zijn en gehele getallen.
  7. Voeg waarden in de kaart my_map in. Een sleutel van 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 my_map van de kaart te doorlopen op zoek naar de belangrijkste kat.
  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 af op de console.
  14. Het programma moet uitvoer retourneren na succesvolle voltooiing.
  15. Einde van de hoofdtekst van de functie main().

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 op unieke wijze sorteren en identificeren van elementen.
  • De toegewezen waarden helpen bij het opslaan van inhoud die aan de sleutel is gekoppeld.
  • C++ map slaat unieke sleutels op in gesorteerde volgorde.
  • Om met C++-kaart te werken, maken we een iterator om de elementen te herhalen.
  • Met de iterator kunnen we taken uitvoeren zoals het zoeken en verwijderen van items van de kaart.

C Taal

  1. C Standaard bibliotheekfuncties
  2. Operators in C++ met voorbeeld:wat is, typen en programma's
  3. C++ do...while-lus met voorbeelden
  4. C++ Switch Case Statement met VOORBEELD
  5. C++ Dynamische toewijzing van arrays met voorbeeld
  6. C++-aanwijzers met voorbeelden
  7. Overbelasting van C++-operator met voorbeelden
  8. C++-structuur met voorbeeld
  9. std::lijst in C++ met Voorbeeld
  10. C++-functies met programmavoorbeelden
  11. Verschil tussen structuur en klasse:uitgelegd met C++-voorbeeld