Karte in C++ Standard Template Library (STL) mit Druckbeispiel
Was ist std::map?
In C++ eine MAP ist ein assoziativer Container, der Elemente in einer zugeordneten Form speichert. Jedes Element in der Zuordnung 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 können sich in ihrem Typ unterscheiden, aber der Mitgliedstyp kombiniert sie über einen Paartyp, der beide kombiniert.
In diesem C++-Tutorial lernen Sie:
- Was ist std::map?
- Warum std::map verwenden?
- Syntax:
- Mitgliedstypen:
- Integrierte Funktionen
- Iterieren über Kartenelemente
- Einfügen von Daten in std::map
- Suchen in einer Karte
- Löschen von Daten aus einer Karte
Warum std::map verwenden?
Hier sind Gründe für die Verwendung von map:
- std::map speichert eindeutige Schlüssel nur in sortierter Reihenfolge basierend auf ausgewählten Sortierkriterien.
- Es ist einfach und schneller, mit der Taste nach Elementen zu suchen.
- Jedem Schlüssel ist nur ein Element zugeordnet.
- std::map kann als assoziatives Array verwendet werden.
- std::map ist unter Verwendung von Binärbäumen (ausgeglichen) implementierbar.
Syntax:
Um std::map zu deklarieren, verwenden Sie diese Syntax:
std::map<key_datatype, value_datatype>map_name;
- Der key_datatype bezeichnet den Datentyp der Kartenschlüssel.
- Der value_datatype bezeichnet den Datentyp der Werte, die den Zuordnungsschlüsseln entsprechen.
- map_name ist der Name der Karte.
Zum Beispiel:
map<string, int> my_map;
Wir haben eine Map namens my_map deklariert. Die Karte hat eine Zeichenfolge als Schlüssel Datentypen und Integer als Werte Datentyp.
Mitgliedstypen:
Die Memberfunktionen können die folgenden Membertypen entweder als Parameter oder als Rückgabetyp verwenden:
- Schlüsseltyp: Key (Der erste Parameter in der Vorlage)
- zugeordneter_Typ: T (Der zweite Parameter in der Vorlage)
- key_compare: Vergleichen (Der dritte Parameter in der Vorlage)
- Zuordnungstyp: Alloc (Der vierte Parameter in der Vorlage)
- Werttyp: pair
- 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 für value_type
- const_iterator: ein bidirektionaler Iterator für den const value_type
- reverse_iterator: ein umgekehrter Iterator
- const_reverse_iterator: ein konstanter umgekehrter Iterator
- Unterschiedstyp: ptrdiff_t
- Größentyp: size_t
Integrierte Funktionen
std::map kommt mit eingebauten Funktionen. Einige davon sind:
- begin()- 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( pair(key, value))- Diese Funktion fügt ein neues Schlüssel-Wert-Paar in eine Map ein.
- find(val)- Diese Funktion übergibt den Iterator an das val-Element, wenn es gefunden wird. Andernfalls wird m.end() zurückgegeben.
- 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 Map.
- Löschen ()- Diese Funktion löscht alle Einträge 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.
Zum Beispiel:
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; } }
Ausgabe:
Hier ist ein Screenshot des Codes:
Code-Erklärung:
- Fügen Sie die iostream-Header-Datei in unseren Code ein, um ihre Funktionen zu nutzen.
- Fügen Sie die String-Header-Datei in unseren Code ein, um ihre Funktionen zu nutzen.
- Fügen Sie die Map-Header-Datei in unseren Code ein, um ihre Funktionen zu nutzen.
- Fügen Sie den std-Namespace in unseren Code ein, um seine Klassen zu verwenden, ohne ihn aufzurufen.
- Rufen Sie die Funktion main() auf. Das { markiert den Beginn des Hauptteils der Funktion.
- Erstellen Sie eine Map namens Students, in der die Schlüssel Integer und die Werte Strings sind.
- Fügen Sie Werte in die Map Students ein. Ein Schlüssel von 200 und ein Wert von Alice werden in die Karte eingefügt.
- Fügen Sie Werte in die Map Students ein. Ein Schlüssel von 201 und ein Wert von John werden in die Karte eingefügt.
- Verwenden Sie die size()-Funktion, um die Größe der Map namens Students zu erhalten. Dies sollte eine 2 zurückgeben.
- Text auf der Konsole ausgeben.
- Verwenden Sie eine for-Schleife, um einen Iterator mit dem Namen it zu erstellen, der die Elemente der Map mit dem Namen Students durchläuft.
- Drucken Sie die Werte der Map Students auf der Konsole.
- Ende des Körpers der for-Schleife.
- Ende des Hauptteils der main()-Funktion.
Einfügen von Daten in std::map
Sie können Elemente mit der Funktion insert() in std::map eingeben. Denken Sie daran, dass die std::map-Schlüssel eindeutig sein müssen.
Es prüft also zuerst, ob jeder Schlüssel in der Karte vorhanden ist. Wenn es vorhanden ist, wird der Eintrag nicht eingefügt, aber es wird der Iterator für den vorhandenen Eintrag zurückgegeben. Wenn es nicht vorhanden ist, wird der Eintrag eingefügt.
Die Funktion hat die folgenden 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 Map eingefügt.
Das insert_or_assing() Die Funktion funktioniert genauso wie die Funktion insert(), aber wenn der angegebene Schlüssel bereits in der Map existiert, 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; }
Ausgabe:
Hier ist ein Screenshot des Codes:
Code-Erklärung:
- Fügen Sie die Map-Header-Datei in unseren Code ein, um ihre Funktionen zu nutzen.
- Fügen Sie die iostream-Header-Datei in unseren Code ein, um ihre Funktionen zu nutzen.
- Fügen Sie den std-Namespace in unseren Code ein, um seine Klassen zu verwenden, ohne ihn aufzurufen.
- Rufen Sie die Funktion main() auf. Das { markiert den Beginn des Hauptteils der Funktion.
- Erstellen Sie eine Map namens m, in der die Schlüssel Ganzzahlen und die Werte Ganzzahlen sind. Es wurden drei Einträge in der Karte vorgenommen.
- Einen neuen Eintrag in die Karte einfügen m. Ein Schlüssel von 5 und ein Wert von 6 werden in die Karte eingefügt.
- Versuch, einen Eintrag in einen bereits existierenden Schlüssel zu machen. Da der Schlüssel 1 bereits in der Karte existiert, wird der Eintrag nicht vorgenommen.
- Verwenden der Funktion insert_or_assign(), um einen bestehenden Eintrag einzufügen oder zu ändern. Da der Schlüssel 1 bereits existiert, wird sein Wert auf 6 geändert.
- Drucken Sie etwas Text auf der Konsole. Das Zeichen „\t“ erzeugt einen horizontalen Abstand, während das Zeichen „\n“ den Mauszeiger in die nächste Zeile bewegt.
- Verwenden Sie eine for-Schleife, um einen Iterator namens itr zu erstellen, der die Elemente der Map namens m durchläuft.
- Drucken Sie die Werte der Karte m auf der Konsole. 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 in die nächste Zeile.
- Ende des Körpers der for-Schleife.
- Das Programm muss nach erfolgreichem Abschluss einen Wert zurückgeben.
- Ende des Hauptteils der main()-Funktion.
In einer Karte suchen
Wir können die Funktion find() verwenden, um nach Elementen in einer Karte anhand ihrer Schlüssel zu suchen. 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 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'; } }
Ausgabe:
Hier ist ein Screenshot des Codes:
Code-Erklärung:
- Fügen Sie die iostream-Header-Datei in unseren Code ein, um ihre Funktionen ohne Fehler zu verwenden.
- Fügen Sie die String-Header-Datei in unseren Code ein, um ihre Funktionen ohne Fehler zu verwenden.
- Fügen Sie die Map-Header-Datei in unseren Code ein, um ihre Funktionen ohne Fehler zu verwenden.
- Fügen Sie den std-Namespace in unseren Code ein, um seine Klassen zu verwenden, ohne ihn aufzurufen.
- Rufen Sie die Funktion main() auf. Das { markiert den Anfang des Hauptteils der main()-Funktion.
- Erstellen Sie eine Map namens Students, deren Schlüssel Integer und Werte-Strings sein werden.
- Fügen Sie Werte in die Map Students ein. Ein Schlüssel von 200 und ein Wert von Alice werden in die Karte eingefügt.
- Fügen Sie Werte in die Map Students ein. Ein Schlüssel von 201 und ein Wert von John werden in die Karte eingefügt.
- Suchen Sie nach dem Wert, der einem Schlüssel von 201 zugeordnet ist.
- Verwenden Sie eine if-Anweisung, um zu prüfen, ob der Wert für den Schlüssel gefunden wird.
- Den Wert des Schlüssels zusammen mit etwas Text auf der Konsole ausgeben.
- Ende des Hauptteils der if-Anweisung.
- Ende des Hauptteils der main()-Funktion.
Daten von einer Karte löschen
Wir können die Funktion erase() verwenden, um einen Wert aus einer Karte zu löschen. Wir erstellen einfach einen Iterator, der auf das zu löschende Element zeigt. Der Iterator wird dann an die Funktion erase() übergeben.
Beispiel 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; }
Ausgabe:
Hier ist ein Screenshot des Codes:
Code-Erklärung:
- Fügen Sie die iostream-Header-Datei in unseren Code ein, um ihre Funktionen zu nutzen.
- Fügen Sie die String-Header-Datei in unseren Code ein, um ihre Funktionen zu nutzen.
- Fügen Sie die Map-Header-Datei in unseren Code ein, um ihre Funktionen zu nutzen.
- Fügen Sie den std-Namespace in unseren Code ein, um seine Klassen zu verwenden, ohne ihn aufzurufen.
- Rufen Sie die Funktion main() auf. Das { markiert den Beginn des Hauptteils der main()-Funktion.
- Erstellen Sie eine Map namens my_map, deren Schlüssel Strings und Integer-Werte sein werden.
- Füge Werte in die Map my_map ein. Ein Kuhschlüssel und ein Wert von 1 werden in die Karte eingefügt.
- Füge Werte in die Map my_map ein. Ein Schlüssel von Cat und ein Wert von 2 werden in die Karte eingefügt.
- Fügen Sie einen Wert 3 in die Karte my_map mit einem Schlüssel eines Löwen ein.
- Erstellen Sie einen Iterator, um die Karte my_map zu durchlaufen und nach der Schlüsselkatze zu suchen.
- Lösche das Element, auf das der Iterator zeigt.
- Verwenden Sie einen Iterator, um die Elemente der Karte my_map vom Anfang bis zum Ende zu durchlaufen.
- Den Inhalt der Map my_map auf der Konsole ausdrucken.
- Das Programm muss nach erfolgreichem Abschluss eine Ausgabe zurückgeben.
- Ende des Hauptteils der main()-Funktion.
Zusammenfassung:
- Eine Karte ist ein assoziativer Container, der Elemente in einer zugeordneten Form speichert.
- Jedes Element in der Zuordnung hat einen Schlüsselwert und einen zugeordneten Wert.
- In einer Zuordnung können zwei zugeordnete Werte Schlüsselwerte nicht gemeinsam nutzen.
- Die Schlüsselwerte helfen beim Sortieren und eindeutigen Identifizieren von Elementen.
- Die zugeordneten Werte helfen beim Speichern von Inhalten, die mit dem Schlüssel verknüpft sind.
- C++ Map speichert eindeutige Schlüssel in sortierter Reihenfolge.
- Um mit der C++-Karte zu arbeiten, erstellen wir einen Iterator, um die Elemente zu durchlaufen.
- Mit dem Iterator können wir Aufgaben wie das Suchen und Löschen von Elementen auf der Karte ausführen.
C Sprache
- C-Standardbibliotheksfunktionen
- Operatoren in C++ mit Beispiel:Was ist, Typen und Programme
- C++ do…while-Schleife mit Beispielen
- C++ Switch Case-Anweisung mit BEISPIEL
- C++ Dynamische Zuordnung von Arrays mit Beispiel
- C++-Zeiger mit Beispielen
- Überladen von C++-Operatoren mit Beispielen
- std::list in C++ mit Beispiel
- C++ Funktionen mit Programmbeispielen
- Unterschied zwischen Struktur und Klasse:Erklärt mit C++-Beispiel