Was ist std :: map?
In C ++ ist ein MAP ein assoziativer Container, in dem Elemente in einer zugeordneten Form gespeichert werden. Jedes Element in der Karte besteht aus einem Schlüsselwert und einem zugeordneten Wert. Zwei zugeordnete Werte können nicht dieselben Schlüsselwerte verwenden.
Die Schlüsselwerte eignen sich zum eindeutigen Sortieren und Identifizieren von Elementen. Die zugeordneten Werte dienen zum Speichern von Inhalten, die dem Schlüssel zugeordnet sind. Die beiden Typen unterscheiden sich möglicherweise, aber der Elementtyp kombiniert sie über einen Paartyp, der beide kombiniert.
In diesem C ++ - Tutorial lernen Sie:
- Was ist std :: map?
- Warum std :: map verwenden?
- Syntax:
- Mitgliedertypen:
- Eingebaute Funktionen
- Iterieren über Kartenelemente
- Einfügen von Daten in std :: map:
- Suchen in einer Karte
- Daten aus einer Karte löschen
Warum std :: map verwenden?
Hier sind Gründe für die Verwendung der Karte:
- std :: map speichert eindeutige Schlüssel nur in sortierter Reihenfolge basierend auf ausgewählten Sortierkriterien.
- Mit dem Schlüssel ist es einfach und schneller, nach Elementen zu suchen.
- Jedem Schlüssel ist nur ein Element zugeordnet.
- std :: map kann als assoziatives Array verwendet werden.
- std :: map kann mithilfe von Binärbäumen (ausgeglichen) implementiert werden.
Syntax:
Verwenden Sie diese Syntax, um std :: map zu deklarieren:
std::mapmap_name;
- Der Schlüsseldatentyp bezeichnet den Datentyp der Zuordnungsschlüssel.
- Der value_datatype bezeichnet den Datentyp der Werte, die den Map-Schlüsseln entsprechen.
- Der Kartenname ist der Name der Karte.
Zum Beispiel:
mapmy_map;
Wir haben eine Karte mit dem Namen my_map deklariert. Die Karte wird eine Zeichenfolge als hat Schlüssel - Datentypen und integer als Werte - Datentyp.
Mitgliedertypen:
Die Elementfunktionen können die folgenden Elementtypen entweder als Parameter oder als Rückgabetyp verwenden:
- key_type: Key (Der erste Parameter in der Vorlage)
- mapped_type: T (Der zweite Parameter in der Vorlage)
- key_compare: Compare (Der dritte Parameter in der Vorlage)
- allocator_type: Alloc (Der vierte Parameter in der Vorlage)
- value_type: pair
- value_compare: Verschachtelte Funktionsklasse zum Vergleichen von Elementen
- Referenz: allocator_type :: reference
- const_reference: allocator_type :: const_reference
- Zeiger: allocator_type :: Zeiger
- const_pointer: allocator_type :: const_pointer
- Iterator: Ein bidirektionaler Iterator für den Wertetyp
- const_iterator: Ein bidirektionaler Iterator für den const value_type
- reverse_iterator: ein umgekehrter Iterator
- const_reverse_iterator: Ein konstanter Reverse-Iterator
- Differenztyp: ptrdiff_t
- size_type: size_t
Eingebaute Funktionen
std :: map verfügt über integrierte Funktionen. Einige davon sind:
- begin () - Diese Funktion bringt den Iterator zum ersten Element der Karte zurück.
- size () - Diese Funktion gibt die Anzahl der Elemente in einer Karte zurück.
- empty () - Diese Funktion gibt einen booleschen Wert zurück, der angibt, ob eine Map leer ist.
- Einfügen (Paar (Schlüssel, Wert)) - Diese Funktion fügt ein neues Schlüssel-Wert-Paar in eine Karte ein.
- find (val) - Diese Funktion gibt dem val-Element den Iterator, 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.
- erase (const g) - Diese Funktion löscht den Schlüsselwert g aus einer Karte.
- Clear () - Diese Funktion löscht alle Elemente aus einer Karte.
Iterieren über Kartenelemente
Sie können die Kartenelemente durchlaufen. Wir müssen einfach einen Iterator erstellen und ihn dafür verwenden. Zum Beispiel:
Beispiel 1:
#include#include #include
Ausgabe:
Hier ist ein Screenshot des Codes:
Code Erläuterung:
- 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 Standard-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 Karte mit dem Namen "Schüler", in der die Schlüssel Ganzzahlen und die Werte Zeichenfolgen sind.
- Werte in die Karte einfügen Schüler. Ein Schlüssel von 200 und ein Wert von Alice werden in die Karte eingefügt.
- Werte in die Karte einfügen Schüler. Ein Schlüssel von 201 und ein Wert von John werden in die Karte eingefügt.
- Verwenden Sie die Funktion size (), um die Größe der Karte mit dem Namen Students zu ermitteln. Dies sollte eine 2 zurückgeben.
- Drucken Sie Text auf der Konsole.
- Verwenden Sie eine for-Schleife, um einen Iterator mit dem Namen zu erstellen, der über die Elemente der Karte mit dem Namen Students iteriert.
- Drucken Sie die Werte der Karte Schüler auf der Konsole.
- Ende des Körpers der for-Schleife.
- Ende des Körpers 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.
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, sondern der Iterator für den vorhandenen Eintrag zurückgegeben. Ist dies nicht der Fall, wird der Eintrag eingefügt.
Die Funktion hat folgende Variationen:
- Einfügen (Paar) - Mit dieser Variante wird ein Schlüssel-Wert-Paar in die Karte eingefügt.
- insert (start_itr, end_itr) - Mit dieser Variante werden die Einträge innerhalb des durch start_itr und end_itr definierten Bereichs aus einer anderen Map eingefügt.
Die Funktion insert_or_assing () funktioniert genauso wie die Funktion insert (). Wenn der angegebene Schlüssel jedoch bereits in der Zuordnung vorhanden ist, wird sein Wert geändert.
Beispiel 2:
#include
Ausgabe:
Hier ist ein Screenshot des Codes:
Code Erläuterung:
- 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 Standard-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 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. Ein Schlüssel von 5 und ein Wert von 6 werden in die Karte 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 die Eingabe nicht.
- Verwenden der Funktion insert_or_assign () zum Einfügen oder Ändern eines vorhandenen Eintrags. Da der Schlüssel 1 bereits vorhanden ist, wird sein Wert in 6 geändert.
- Drucken Sie 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 Sie eine for-Schleife, um einen Iterator mit dem Namen itr zu erstellen, der über die Elemente der Karte mit dem Namen m iteriert.
- 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 Körpers der main () - Funktion.
Suchen in einer Karte
Wir können die Funktion find () verwenden, um nach Elementen in einer Karte anhand ihrer Schlüssel zu suchen. Wird der Schlüssel nicht gefunden, gibt die Funktion std :: map :: end zurück. Andernfalls wird ein Iterator des gesuchten Elements zurückgegeben.
Beispiel 2:
#include#include #include
Ausgabe:
Hier ist ein Screenshot des Codes:
Code Erläuterung:
- Fügen Sie die iostream-Headerdatei 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 Standard-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 Karte mit dem Namen "Schüler", deren Schlüssel Ganzzahlen und Wertezeichenfolgen sind.
- Werte in die Karte einfügen Schüler. Ein Schlüssel von 200 und ein Wert von Alice werden in die Karte eingefügt.
- Werte in die Karte einfügen Schüler. 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 überprüfen, ob der Wert für den Schlüssel gefunden wurde.
- Drucken Sie den Wert des Schlüssels neben Text auf der Konsole.
- Ende des Textes der if-Anweisung.
- Ende des Körpers der main () - Funktion.
Daten aus einer Karte löschen
Mit der Funktion erase () können wir einen Wert aus einer Karte löschen. Wir erstellen einfach einen Iterator, der auf das zu löschende Element verweist. Der Iterator wird dann an die Funktion erase () übergeben.
Beispiel 3:
#include#include #include
Ausgabe:
Hier ist ein Screenshot des Codes:
Code Erläuterung:
- 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 Standard-Namespace in unseren Code ein, um seine Klassen zu verwenden, ohne ihn aufzurufen.
- Rufen Sie die Funktion main () auf. Das {markiert den Beginn des Körpers der main () - Funktion.
- Erstellen Sie eine Map mit dem Namen my_map, deren Schlüssel Zeichenfolgen und Ganzzahlen sind.
- Fügen Sie Werte in die Map my_map ein. Ein Kuhschlüssel und ein Wert von 1 werden in die Karte eingefügt.
- Fügen Sie 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 der Karte my_map mit einem Löwenschlüssel den Wert 3 hinzu.
- Erstellen Sie einen Iterator, um über die Karte zu iterieren. My_map sucht nach der Schlüsselkatze.
- Löschen Sie das Element, auf das der Iterator zeigt.
- Verwenden Sie einen Iterator, um die Elemente der Map 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 die Ausgabe zurückgeben.
- Ende des Körpers der main () - Funktion.
Zusammenfassung:
- Eine Karte ist ein assoziativer Container, in dem Elemente in einer zugeordneten Form gespeichert werden.
- Jedes Element in der Karte hat einen Schlüsselwert und einen zugeordneten Wert.
- In einer Karte können zwei zugeordnete Werte keine Schlüsselwerte gemeinsam nutzen.
- Die Schlüsselwerte helfen beim eindeutigen Sortieren und Identifizieren von Elementen.
- Die zugeordneten Werte helfen beim Speichern des mit dem Schlüssel verknüpften Inhalts.
- In der C ++ - Karte werden eindeutige Schlüssel in sortierter Reihenfolge gespeichert.
- Um mit C ++ - Map 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 aus der Karte ausführen.