Karte ein C++ Standardvorlagenbibliothek (STL)

Was ist Map in C++? Syntax

In C++herunter, eine MAP ist ein assoziativer Container, der Elemente in einer zugeordneten Form speichert. Jedes Element in der Karte besteht aus einem Schlรผsselwert und einem zugeordneten Wert. Zwei zugeordnete Werte kรถnnen nicht dieselben Schlรผsselwerte haben.

Die Schlรผsselwerte eignen sich gut zum Sortieren und eindeutigen Identifizieren von Elementen. Die zugeordneten Werte dienen zum Speichern von Inhalten, die dem Schlรผssel zugeordnet sind. Die beiden Typen kรถnnen sich zwar unterscheiden, aber der Mitgliedstyp kombiniert sie รผber einen Paartyp, der beide kombiniert.

Warum std::map verwenden?

Hier sind Grรผnde fรผr die Verwendung von Karte:

  • std::map speichert eindeutige Schlรผssel nur in sortierter Reihenfolge basierend auf ausgewรคhlten Sortierkriterien.
  • Mit dem Schlรผssel lรคsst sich die Suche nach Elementen einfacher und schneller durchfรผhren.
  • An jedem Schlรผssel ist nur ein Element angebracht.
  • std::map kann als assoziatives Array verwendet werden.
  • std::map ist mithilfe von Binรคrbรคumen (ausgewogen) umsetzbar.

Syntax

Um std::map zu deklarieren, verwenden Sie diese Syntax:

std::map<key_datatype, value_datatype>map_name; 
  • Die key_datatype bezeichnet den Datentyp der Kartenschlรผssel.
  • Die value_datatype bezeichnet den Datentyp der Werte, die den Kartenschlรผsseln entsprechen.
  • Die map_name ist der Name der Karte.

Beispielsweise:

map<string, int> my_map; 

Wir haben eine Karte mit dem Namen deklariert my_map. Die Karte hat eine Zeichenfolge als Haupt Datentypen und Ganzzahl als Werte Datentyp.

Mitgliedstypen

Die Memberfunktionen kรถnnen die folgenden Membertypen entweder als Parameter oder als Rรผckgabetyp verwenden:

  • Schlรผsselart: Schlรผssel (Der erste Parameter in der Vorlage)
  • zugeordneter_Typ: T (Der zweite Parameter in der Vorlage)
  • key_compare: Vergleichen (Der dritte Parameter in der Vorlage)
  • allocator_type: Alloc (Der vierte Parameter in der Vorlage)
  • Werttyp: Paar
  • value_compare: Verschachtelte Funktionsklasse zum Vergleichen von Elementen
  • Referenz: allocator_type::reference
  • const_reference: allocator_type::const_reference
  • Zeiger: allocator_type::pointer
  • const_pointer: allocator_type::const_pointer
  • Iterator: ein bidirektionaler Iterator zum value_type
  • const_iterator: ein bidirektionaler Iterator zum const value_type
  • reverse_iterator: ein umgekehrter Iterator
  • const_reverse_iterator: ein konstanter Reverse-Iterator
  • Differenztyp: ptrdiff_t
  • size_type: size_t

Integrierte Funktionen von std::map

std::map verfรผgt รผber integrierte Funktionen. Einige davon umfassen:

  • beginnen() - Diese Funktion gibt den Iterator zum ersten Element der Karte zurรผck.
  • GrรถรŸe() -Diese Funktion gibt die Anzahl der Elemente in einer Karte zurรผck.
  • leer() -Diese Funktion gibt einen booleschen Wert zurรผck, der angibt, ob eine Karte leer ist.
  • insert( Paar(Schlรผssel, Wert)) โ€“ Diese Funktion fรผgt ein neues Schlรผssel-Wert-Paar in eine Karte ein.
  • find(val) โ€“ Diese Funktion gibt den Iterator an das Val-Element weiter, wenn es gefunden wird. Andernfalls gibt sie m.end() zurรผck.
  • Lรถschen (Iteratorposition) โ€“ Diese Funktion lรถscht das Element an der Position, auf die der Iterator zeigt.
  • lรถschen(const g) โ€“ Diese Funktion lรถscht den Schlรผsselwert g aus einer Karte.
  • Klar () -Diese Funktion lรถscht alle Elemente aus einer Karte.

Iterieren รผber Kartenelemente

Sie kรถnnen รผber die Kartenelemente iterieren. Wir mรผssen lediglich einen Iterator erstellen und ihn dafรผr verwenden.
Beispielsweise:

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

Ausgang:

Iterieren รผber Kartenelemente

Hier ist ein Screenshot des Codes:

Iterieren รผber Kartenelemente

Code-Erklรคrung:

  1. Fรผgen Sie die iostream-Header-Datei in unseren Code ein, um ihre Funktionen zu nutzen.
  2. Fรผgen Sie die String-Header-Datei in unseren Code ein, um ihre Funktionen zu nutzen.
  3. Fรผgen Sie die Map-Header-Datei in unseren Code ein, um ihre Funktionen zu nutzen.
  4. Fรผgen Sie den std-Namespace in unseren Code ein, um seine Klassen zu verwenden, ohne ihn aufzurufen.
  5. Ruf den main() Funktion. Das { markiert den Anfang des Funktionskรถrpers.
  6. Erstellen Sie eine Karte mit dem Namen โ€žStudentenโ€œ, in der die Schlรผssel Ganzzahlen und die Werte Zeichenfolgen sind.
  7. Fรผgen Sie Werte in die Karte โ€žSchรผlerโ€œ ein. Ein Schlรผssel von 200 und ein Wert von Alice werden in die Karte eingefรผgt.
  8. Fรผgen Sie Werte in die Karte โ€žSchรผlerโ€œ ein. Ein Schlรผssel von 201 und ein Wert von John werden in die Karte eingefรผgt.
  9. Verwenden Sie die size() Funktion, um die GrรถรŸe der Karte mit dem Namen โ€žStudentenโ€œ zu ermitteln. Dies sollte eine 2 zurรผckgeben.
  10. Drucken Sie einen Text auf der Konsole.
  11. Verwenden Sie eine for-Schleife, um einen Iterator mit dem Namen โ€žitโ€œ zu erstellen, der die Elemente der Karte mit dem Namen โ€žStudentenโ€œ durchlรคuft.
  12. Drucken Sie die Werte der Map Students auf der Konsole aus.
  13. Ende des Kรถrpers der for-Schleife.
  14. Ende des Kรถrpers des main() Funktion.

Einfรผgen von Daten in std::map

Sie kรถnnen Elemente in std::map eingeben, indem Sie die verwenden insert() Funktion. Denken Sie daran, dass die std::map-Schlรผssel eindeutig sein mรผssen.

Daher wird zunรคchst geprรผft, ob jeder Schlรผssel in der Karte vorhanden ist. Wenn es vorhanden ist, wird der Eintrag nicht eingefรผgt, aber es gibt den Iterator fรผr den vorhandenen Eintrag zurรผck. Ist er nicht vorhanden, wird der Eintrag eingefรผgt.

Die Funktion hat folgende Variationen:

  • einfรผgen(Paar) โ€“ Bei dieser Variante wird ein Schlรผssel-Wert-Paar in die Karte eingefรผgt.
  • insert(start_itr, end_itr) โ€“ Bei dieser Variante werden die Eintrรคge innerhalb des durch start_itr und end_itr definierten Bereichs aus einer anderen Karte eingefรผgt.

Die insert_or_assing() Funktion funktioniert auf die gleiche Weise wie insert() Funktion, aber wenn der angegebene Schlรผssel bereits in der Karte vorhanden ist, wird sein Wert geรคndert.

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

Ausgang:

Einfรผgen von Daten in std::map

Hier ist ein Screenshot des Codes:

Einfรผgen von Daten in std::map

Code-Erklรคrung:

  1. Fรผgen Sie die Map-Header-Datei in unseren Code ein, um ihre Funktionen zu nutzen.
  2. Fรผgen Sie die iostream-Header-Datei in unseren Code ein, um ihre Funktionen zu nutzen.
  3. Fรผgen Sie den std-Namespace in unseren Code ein, um seine Klassen zu verwenden, ohne ihn aufzurufen.
  4. Ruf den main() Funktion. Das { markiert den Anfang des Funktionskรถrpers.
  5. Erstellen Sie eine Karte mit dem Namen m, in der die Schlรผssel Ganzzahlen und die Werte Ganzzahlen sind. Es wurden drei Eintrรคge in die Karte vorgenommen.
  6. Fรผgen Sie einen neuen Eintrag in die Karte ein m. In die Karte werden ein Schlรผssel von 5 und ein Wert von 6 eingefรผgt.
  7. Es wird versucht, einen Eintrag in einen bereits vorhandenen Schlรผssel vorzunehmen. Da der Schlรผssel 1 bereits in der Karte vorhanden ist, erfolgt der Eintrag nicht.
  8. Verwendung der insert_or_assign() Funktion zum Einfรผgen oder ร„ndern eines vorhandenen Eintrags. Da der Schlรผssel 1 bereits existiert, wird sein Wert auf 6 geรคndert.
  9. Drucken Sie einen Text auf der Konsole. Das Zeichen โ€ž\tโ€œ erzeugt ein horizontales Leerzeichen, wรคhrend das Zeichen โ€ž\nโ€œ den Mauszeiger in die nรคchste Zeile bewegt.
  10. Verwenden for-Schleife um einen Iterator namens itr zu erstellen, der รผber die Elemente der Karte namens m iteriert.
  11. Drucken Sie die Werte der Karte m auf der Konsole aus. Das Zeichen โ€ž\tโ€œ erzeugt einen horizontalen Abstand zwischen jedem Schlรผssel und seinem entsprechenden Wert. Im Gegensatz dazu bewegt das Zeichen โ€ž\nโ€œ den Mauszeiger nach jeder Iteration zur nรคchsten Zeile.
  12. Ende des Kรถrpers der for-Schleife.
  13. Das Programm muss bei erfolgreichem Abschluss einen Wert zurรผckgeben.
  14. Ende des Kรถrpers des main() Funktion.

Suchen in einer Karte

Wir kรถnnen das benutzen find() Funktion zum Suchen von Elementen in einer Map anhand ihrer Schlรผssel. Wenn der Schlรผssel nicht gefunden wird, gibt die Funktion std::map::end zurรผck. Andernfalls wird ein Iterator des gesuchten Elements zurรผckgegeben.

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

Ausgang:

Suchen in einer Karte

Hier ist ein Screenshot des Codes:

Suchen in einer Karte

Code-Erklรคrung:

  1. Fรผgen Sie die iostream-Header-Datei in unseren Code ein, um ihre Funktionen zu nutzen, ohne dass Fehler auftreten.
  2. Fรผgen Sie die String-Header-Datei in unseren Code ein, um ihre Funktionen ohne Fehler zu nutzen.
  3. Binden Sie die Map-Header-Datei in unseren Code ein, um ihre Funktionen zu nutzen, ohne dass Fehler auftreten.
  4. Fรผgen Sie den std-Namespace in unseren Code ein, um seine Klassen zu verwenden, ohne ihn aufzurufen.
  5. Ruf den main() Funktion. Das { markiert den Anfang des Hauptteils von main() Funktion.
  6. Erstellen Sie eine Karte mit dem Namen Students, deren Schlรผssel Ganzzahlen und Wertezeichenfolgen sind.
  7. Fรผgen Sie Werte in die Karte โ€žSchรผlerโ€œ ein. Ein Schlรผssel von 200 und ein Wert von Alice werden in die Karte eingefรผgt.
  8. Fรผgen Sie Werte in die Karte โ€žSchรผlerโ€œ ein. Ein Schlรผssel von 201 und ein Wert von John werden in die Karte eingefรผgt.
  9. Suchen Sie nach dem Wert, der einem Schlรผssel von 201 zugeordnet ist.
  10. Verwenden Sie eine if-Anweisung, um zu prรผfen, ob der Wert fรผr den Schlรผssel gefunden wird.
  11. Geben Sie den Wert des Schlรผssels zusammen mit etwas Text auf der Konsole aus.
  12. Ende des Hauptteils der if-Anweisung.
  13. Ende des Kรถrpers des main() Funktion.

Daten aus einer Karte lรถschen

Wir kรถnnen das benutzen erase() Funktion zum Lรถschen eines Werts aus einer Karte. Wir erstellen einfach einen Iterator, der auf das zu lรถschende Element zeigt. Der Iterator wird dann an รผbergeben erase() Funktion.

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

Ausgang:

Daten aus einer Karte lรถschen

Hier ist ein Screenshot des Codes:

Daten aus einer Karte lรถschen

Code-Erklรคrung:

  1. Fรผgen Sie die iostream-Header-Datei in unseren Code ein, um ihre Funktionen zu nutzen.
  2. Fรผgen Sie die String-Header-Datei in unseren Code ein, um ihre Funktionen zu nutzen.
  3. Fรผgen Sie die Map-Header-Datei in unseren Code ein, um ihre Funktionen zu nutzen.
  4. Fรผgen Sie den std-Namespace in unseren Code ein, um seine Klassen zu verwenden, ohne ihn aufzurufen.
  5. Ruf den main() Funktion. Das { markiert den Anfang des Hauptteils des main() Funktion.
  6. Erstellen Sie eine Karte mit dem Namen my_map, deren Schlรผssel Zeichenfolgen und Ganzzahlenwerte sind.
  7. Fรผgen Sie Werte in die Karte my_map ein. Der Schlรผssel Cow und der Wert 1 werden in die Karte eingefรผgt.
  8. Fรผgen Sie Werte in die Karte my_map ein. Der Schlรผssel โ€žCatโ€œ und der Wert โ€ž2โ€œ werden in die Karte eingefรผgt.
  9. Fรผgen Sie der Karte my_map den Wert 3 mit dem Schlรผssel eines Lรถwen hinzu.
  10. Erstellen Sie einen Iterator, um die Karte โ€žmy_mapโ€œ zu durchlaufen und nach der Schlรผsselkatze zu suchen.
  11. Lรถschen Sie das Element, auf das der Iterator zeigt.
  12. Verwenden Sie einen Iterator, um die Elemente der Karte my_map vom Anfang bis zum Ende zu durchlaufen.
  13. Drucken Sie den Inhalt der Karte my_map auf der Konsole aus.
  14. Das Programm muss nach erfolgreichem Abschluss eine Ausgabe zurรผckgeben.
  15. Ende des Kรถrpers des main() Funktion.

Zusammenfassung

  • Eine Karte ist ein assoziativer Container, der Elemente in einer zugeordneten Form speichert.
  • Jedes Element in der Karte verfรผgt รผber einen Schlรผsselwert und einen zugeordneten Wert.
  • In einer Karte kรถnnen zwei zugeordnete Werte keine Schlรผsselwerte gemeinsam nutzen.
  • Die Schlรผsselwerte helfen dabei, Elemente eindeutig zu sortieren und zu identifizieren.
  • Die zugeordneten Werte helfen beim Speichern von Inhalten, die dem Schlรผssel zugeordnet sind.
  • C++ Map speichert eindeutige Schlรผssel in sortierter Reihenfolge.
  • Arbeiten mit C++ Map erstellen wir einen Iterator, um รผber die Elemente zu iterieren.
  • Mit dem Iterator kรถnnen wir Aufgaben wie das Suchen und Lรถschen von Elementen aus der Karte ausfรผhren.

Fassen Sie diesen Beitrag mit folgenden Worten zusammen: