Klasse und Objekte
Eine Klasse ist ein Satz von Variablen und Funktionen, die zusammenarbeiten, wobei den Variablen keine Werte zugewiesen sind. Wenn den Variablen Werte zugewiesen werden, wird die Klasse zu einem Objekt. Unterschiedliche Werte für dieselbe Klasse führen zu unterschiedlichen Objekten; das heißt, verschiedene Objekte sind dieselbe Klasse mit unterschiedlichen Werten. Das Erstellen eines Objekts aus einer Klasse wird als Instanziieren des Objekts bezeichnet.
Der Name unordered_map ist eine Klasse. Ein aus der Klasse unordered_map erstelltes Objekt hat einen vom Programmierer gewählten Namen.
Eine Funktion, die zu einer Klasse gehört, wird benötigt, um ein Objekt aus der Klasse zu instanziieren. In C++ hat diese Funktion denselben Namen wie der Name der Klasse. Objekte, die aus der Klasse erstellt (instanziiert) werden, haben unterschiedliche Namen, die ihnen vom Programmierer gegeben werden.
Ein Objekt aus der Klasse zu erstellen bedeutet, das Objekt zu konstruieren; es bedeutet auch instanziieren.
Ein C++-Programm, das die Klasse unordered_map verwendet, beginnt mit den folgenden Zeilen am Anfang der Datei:
#einschließen#einschließen
Verwenden von Namespace-Std;
Die erste Zeile ist für die Eingabe/Ausgabe. Die zweite Zeile soll dem Programm erlauben, alle Funktionen der Klasse unordered_map zu verwendenmap. Die dritte Zeile erlaubt dem Programm, die Namen im Standard-Namensraum zu verwenden.
Überladen einer Funktion
Wenn zwei oder mehr verschiedene Funktionssignaturen denselben Namen haben, wird dieser Name als überladen bezeichnet. Wenn eine Funktion aufgerufen wird, bestimmen die Anzahl und Art der Argumente, welche Funktion tatsächlich ausgeführt wird.
Konstruktion/Kopie Konstruktion
Einfache Konstruktion
Eine ungeordnete Karte kann wie folgt erstellt und mit Werten versehen werden:
ungeordnete_mapumap["banane"] = "gelb";
umap["Traube"] = "grün";
umap["fig"] = "lila";
Die Deklaration beginnt mit der Template-Spezialisierung mit den Typen für die Schlüssel-Wert-Paare. Darauf folgt der vom Programmierer gewählte Name für die Map; dann ein Semikolon. Das zweite Codesegment zeigt, wie man ihren Tasten Werte zuweist.
Konstruktion nach Initializer_list
Dies kann wie folgt erfolgen:
"Traube", "Grün", "Feige", "Lila");
Aufbau durch Zuweisung von Initializer_list
Beispiel:
"Traube", "Grün", "Feige", "Lila";
Konstruktion durch Kopieren einer anderen unordered_map
Beispiel:
"Traube", "Grün", "Feige", "Lila");
ungeordnete_map
Das Paar Element
Der folgende Code zeigt, wie Sie das Paarelement erstellen und darauf zugreifen:
Paarcout << pr.first << '\n';
cout << pr.second << '\n';
Die Ausgabe ist:
dMeer
erstes und zweites sind reservierte Wörter für die beiden Elemente des Paares. Die Werte im Paar können noch mit first und second geändert werden.
Ein Paar heißt value_type im Topic der ungeordneten Map.
unordered_map Elementzugriff
mapped_type& Operator[](key_type&& k)
Gibt den Wert für den entsprechenden Schlüssel zurück. Beispiel:
umap["banane"] = "gelb";
umap["Traube"] = "grün";
umap["fig"] = "lila";
const char *ret = umap["Traube"];
cout << ret <<'\n';
Die Ausgabe ist: „grün“. Werte können auf die gleiche Weise zugewiesen werden - siehe oben.
unordered_map Kapazität
size_type size() const noexcept
Gibt die Anzahl der Paare in der Karte zurück.
umap["banane"] = "gelb";
umap["Traube"] = "grün";
umap["fig"] = "lila";
cout << umap.size() <<'\n';
Ausgang ist 3.
bool empty() const noexcept
Gibt 1 für wahr zurück, wenn die Karte kein Paar hat, und 0 für falsch, wenn sie Paare hat. Beispiel:
ungeordnete_mapcout << umap.empty() <<'\n';
Ausgang ist 1.
Zurückgebende Iteratoren und die Klasse der ungeordneten Karte
Ein Iterator ist wie ein Zeiger, hat aber mehr Funktionalität als der Zeiger.
begin() keine Ausnahme
Gibt einen Iterator zurück, der auf das erste Paar des Kartenobjekts zeigt, wie im folgenden Codesegment:
ungeordnete_mapumap["banane"] = "gelb"; umap["Traube"] = "grün"; umap["fig"] = "lila";
ungeordnete_map
Paar
cout << pr.first << ", " << pr.second << '\n';
Die Ausgabe ist: Feige, Lila. Die Karte ist ungeordnet.
begin() const noexcept;
Gibt einen Iterator zurück, der auf das erste Element der Kartenobjektsammlung zeigt. Wenn der Objektkonstruktion const vorangestellt ist, wird der Ausdruck „begin() const“ anstelle von „begin()“ ausgeführt. Unter dieser Bedingung können die Elemente im Objekt nicht geändert werden. Es wird zum Beispiel im folgenden Code verwendet.
const unordered_map"Traube", "Grün", "Feige", "Lila");
ungeordnete_map
Paar
cout << pr.first << ", " << pr.second << '\n';
Die Ausgabe ist: Feige, Lila. Die Karte ist ungeordnet. Beachten Sie, dass diesmal const_iterator anstelle von nur iterator verwendet wurde, um den zurückgegebenen Iterator zu erhalten.
end() keine Ausnahme
Gibt einen Iterator zurück, der direkt über das letzte Element des Kartenobjekts hinaus zeigt.
end() const noexcept
Gibt einen Iterator zurück, der direkt über das letzte Element des Kartenobjekts hinaus zeigt. Wenn der Konstruktion des Kartenobjekts const vorangestellt ist, wird der Ausdruck „end() const“ anstelle von „end()“ ausgeführt.
unordered_map Operationen
Iterator find(const key_type& k)
Sucht nach einem Paar des angegebenen Schlüssels in der Karte. Wenn es gefunden wird, gibt es den Iterator zurück. Wenn es nicht gefunden wird, gibt es einen Iterator zurück, der auf das Ende der Karte zeigt, die kein Paar ist. Der folgende Code zeigt, wie diese Memberfunktion verwendet wird:
ungeordnete_mapumap['a'] = 'b'; umap['c'] = 'd'; umap['e'] = 'f';
ungeordnete_map
wenn (umap.find('c') != umap.Ende())
Paar
cout << pr.first << ", " << pr.second << '\n';
Die Ausgabe ist: c, d
const_iterator find(const key_type& k) const;
Diese Version der Funktion wird aufgerufen, wenn die Erstellung der ungeordneten Karte mit const beginnt, wodurch alle Elemente der Karte schreibgeschützt sind.
unordered_map Modifikatoren
Paar
Eine ungeordnete Karte bedeutet, dass die Paare in keiner Reihenfolge sind. Das Programm fügt das Paar also an einer beliebigen Stelle ein, die es für bequem hält. Die Funktion gibt zurück, Paar
umap["banane"] = "gelb";
umap["Traube"] = "grün";
umap["fig"] = "lila";
umap.insert("Kirsche", "Rot", "Erdbeere", "Rot");
cout << umap.size() << '\n';
Die Ausgabe ist: 5. Es kann mehr als ein Paar eingefügt werden.
size_type delete(const key_type& k)
Diese Funktion löscht ein Paar aus der unordered_map. Das folgende Codesegment veranschaulicht:
ungeordnete_mapumap["banane"] = "gelb";
umap["Traube"] = "grün";
umap["fig"] = "lila";
int num = umap.löschen("Traube");
cout << umap.size() << '\n';
Ausgang ist 2.
void swap(unordered_map&)
Zwei ungeordnete Maps können ausgetauscht werden, wie in diesem Codesegment dargestellt:
"Traube", "Grün", "Feige", "Lila", "Erdbeere", "Rot";
ungeordnete_map
umap1.tauschen (umap2);
ungeordnete_map
Paar
ungeordnete_map
Paar
cout << "First key and size of umap1: "<< pr1.first <<", "<< umap1.size() << '\n';
cout << "First key and size of umap2 "<< pr2.first <<", "<< umap2.size() << '\n';
ungeordnete_map
"Traube", "Grün", "Feige", "Lila", "Erdbeere", "Rot";
ungeordnete_map
umap1.tauschen (umap2);
ungeordnete_map
Paar
ungeordnete_map
Paar
cout << "First key and size of umap1: "<< pr1.first <<", "<< umap1.size() << '\n';
cout << "First key and size of umap2 "<< pr2.first <<", "<< umap2.size() << '\n';
Die Ausgabe ist:
Erster Schlüssel und Größe von umap1: Limette, 2
Erster Schlüssel und Größe von umap2 Erdbeere, 4
Die Karte ist ungeordnet. Beachten Sie, dass die Länge einer Karte bei Bedarf erhöht wird. Die Datentypen müssen gleich sein.
Klasse und ihre instanziierten Objekte
Ein Wert gehört zu einem Datentyp wie ein instanziiertes Objekt zu einer Klasse. Die ungeordnete Kartenkonstruktion kann auch eine Klasse als Datentyp akzeptieren. Das folgende Programm veranschaulicht dies:
#einschließen#einschließen
Verwenden von Namespace-Std;
Klasse TheCla
Öffentlichkeit:
int-Zahl;
statisches Zeichen ch;
void func (char cha, const char *str)
cout << "There are " << num << " books worth " << cha << str << " in the store." << '\n';
statischer Leerspaß (char ch)
if (ch == 'a')
cout << "Official static member function" << '\n';
;
int main()
TheCla obj1; TheCla obj2; TheCla obj3; TheCla obj4; TheCla obj5;
ungeordnete_map
umap = "Banane", obj1, "Traube", obj2, "Feige", obj3, "Erdbeere", obj4, "Limette", obj5;
cout << umap.size() << '\n';
0 zurückgeben;
Die Ausgabe ist: 5.
Die Klassendefinition hat zwei öffentliche Datenmember und zwei öffentliche Memberfunktionen. In der Funktion main() werden verschiedene Objekte für die Klasse instanziiert. Anschließend wird eine ungeordnete Karte instanziiert, wobei jedes Paar aus dem Namen einer Frucht und einem Objekt der Klasse besteht. Die Größe der Karte wird angezeigt. Das Programm wird ohne Warnung oder Fehlermeldung kompiliert.
Anwendung der Karte
Das Array ordnet dem Wert einen Index zu. Schlüssel/Wert-Paare gibt es in vielen Lebenssituationen, die programmiert werden können. Das Schlüssel/Wert-Paar Frucht/Farbe ist nur ein Beispiel. Ein weiteres Beispiel sind die Namen von Personen und ihr Alter. In diesem Fall ist das Paar vom Typ Paar
Bildung einer Karte
Eine Karte ist kein zweidimensionales Array mit zwei Spalten. Eine Karte arbeitet mit einer Hash-Funktion. Der Schlüssel wird von der Hash-Funktion in eine ganze Zahl eines Arrays codiert. Es ist dieses Array, das die Werte enthält. Es gibt also tatsächlich ein Array mit den Werten, und die Schlüssel werden den Indizes des Arrays zugeordnet, und so werden die Entsprechungen zwischen Schlüsseln und Werten hergestellt. Hashing ist ein umfangreiches Thema und wird in diesem Artikel nicht behandelt.
Fazit
Eine Map, auch als assoziatives Array bekannt, ist eine Liste von Elementen, wobei jedes Element ein Schlüssel/Wert-Paar ist. Jeder Schlüssel entspricht also einem Wert. In C++ ist die Map als Datenstruktur mit Memberfunktionen und Operatoren implementiert. Eine geordnete Karte ist eine Karte, bei der die Elementpaare nach Schlüsseln geordnet wurden. Eine ungeordnete Karte ist eine Karte, bei der es keine Ordnung gibt.
Technisch gesehen besteht ein Hash aus einem Paar
Die initializer_list für die Map ist ein Array-Literal von Literalen. Jedes interne Literal besteht aus zwei Objekten, dem Schlüssel/Wert-Paar.
Die Memberfunktionen und Operatoren für unordered_map können unter den folgenden Überschriften kategorisiert werden: unordered_map-Konstruktion/Copy-Konstruktion, unordered_map-Kapazität, unordered_map-Iterator, unordered_map-Operationen und unordered_map-Modifikatoren.
Eine ungeordnete Zuordnung wird verwendet, wenn ein Schlüssel einem Wert zugeordnet werden muss.
Chrys