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_datatypebezeichnet den Datentyp der Kartenschlรผssel. - Die
value_datatypebezeichnet den Datentyp der Werte, die den Kartenschlรผsseln entsprechen. - Die
map_nameist 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:
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.
- Ruf den
main()Funktion. Das { markiert den Anfang des Funktionskรถrpers. - Erstellen Sie eine Karte mit dem Namen โStudentenโ, in der die Schlรผssel Ganzzahlen und die Werte Zeichenfolgen sind.
- 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.
- 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.
- Verwenden Sie die
size()Funktion, um die Grรถรe der Karte mit dem Namen โStudentenโ zu ermitteln. Dies sollte eine 2 zurรผckgeben. - Drucken Sie einen Text auf der Konsole.
- 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.
- Drucken Sie die Werte der Map Students auf der Konsole aus.
- Ende des Kรถrpers der for-Schleife.
- 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:
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.
- Ruf den
main()Funktion. Das { markiert den Anfang des Funktionskรถrpers. - 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.
- 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.
- 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.
- 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. - 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.
- Verwenden for-Schleife um einen Iterator namens itr zu erstellen, der รผber die Elemente der Karte namens m iteriert.
- 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.
- Ende des Kรถrpers der for-Schleife.
- Das Programm muss bei erfolgreichem Abschluss einen Wert zurรผckgeben.
- 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:
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, ohne dass Fehler auftreten.
- Fรผgen Sie die String-Header-Datei in unseren Code ein, um ihre Funktionen ohne Fehler zu nutzen.
- Binden Sie die Map-Header-Datei in unseren Code ein, um ihre Funktionen zu nutzen, ohne dass Fehler auftreten.
- Fรผgen Sie den std-Namespace in unseren Code ein, um seine Klassen zu verwenden, ohne ihn aufzurufen.
- Ruf den
main()Funktion. Das { markiert den Anfang des Hauptteils vonmain()Funktion. - Erstellen Sie eine Karte mit dem Namen Students, deren Schlรผssel Ganzzahlen und Wertezeichenfolgen sind.
- 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.
- 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.
- 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.
- Geben Sie den Wert des Schlรผssels zusammen mit etwas Text auf der Konsole aus.
- Ende des Hauptteils der if-Anweisung.
- 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:
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.
- Ruf den
main()Funktion. Das { markiert den Anfang des Hauptteils desmain()Funktion. - Erstellen Sie eine Karte mit dem Namen my_map, deren Schlรผssel Zeichenfolgen und Ganzzahlenwerte sind.
- Fรผgen Sie Werte in die Karte my_map ein. Der Schlรผssel Cow und der Wert 1 werden in die Karte eingefรผgt.
- Fรผgen Sie Werte in die Karte my_map ein. Der Schlรผssel โCatโ und der Wert โ2โ werden in die Karte eingefรผgt.
- Fรผgen Sie der Karte my_map den Wert 3 mit dem Schlรผssel eines Lรถwen hinzu.
- Erstellen Sie einen Iterator, um die Karte โmy_mapโ zu durchlaufen und nach der Schlรผsselkatze zu suchen.
- Lรถschen Sie 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.
- Drucken Sie den Inhalt der Karte my_map auf der Konsole aus.
- Das Programm muss nach erfolgreichem Abschluss eine Ausgabe zurรผckgeben.
- 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.






