Viele Computersprachen stellen ein Wörterbuch bereit, bei dem es sich um eine Datenstruktur handelt. Ein Wörterbuch ist eine schnellere Datenstruktur, die Daten basierend auf Schlüsseln und Werten speichert. Es behält Schlüssel-Wert-Kombinationen bei, sodass Schlüssel nahezu in Echtzeit problemlos nach bestimmten Komponenten durchsucht werden können. Der C++-STL-Sprachstandard umfasst wörterbuchähnliche Datenstrukturen. Zur Beschreibung dieser Datenstruktur wird der Begriff „map“ verwendet. Diese Karte erstellt ein Paar aus Schlüsseln und Werten eines beliebigen Typs (da wir C++ verwenden, müssen die Typen vor der Kompilierung definiert werden). In diesem Abschnitt wird gezeigt, wie Werte in einer vorhandenen Karte oder einem vorhandenen Wörterbuch in C++ aktualisiert werden.
Sehen wir uns zunächst die Definition der Kartendatenstruktur an. Diese internen Vorlagen erfordern zwei verschiedene Typen. Die Syntax und die notwendigen Bibliotheken werden unten angezeigt -
#include <map> map<type1, type2=""> mapVariable; </type1,></map>
In diesem Fall müssen wir die „map“-Bibliothek importieren, um die Kartendatenstruktur zu verwenden. Hierzu sind die Datentypen 1 und 2 erforderlich. Der Datentyp des Schlüsselparameters ist Typ1 und der Datentyp des Wertparameters ist Typ2. Hier ist das von der Kartentypklasse abgeleitete Objekt „mapVariable“. Sehen wir uns nun an, wie man es mithilfe der C++-Zuordnung erhält.
In der Kartendatenstruktur können wir Werte in die Karte einfügen, indem wir auf den vorhandenen oder neuen Schlüssel zugreifen. Da es sich hier um die Aktualisierung eines Werts handelt, müssen wir den vorhandenen Schlüssel aktualisieren. Schlüssel werden in eckigen Klammern wie in der Array-Index-Notation verwendet. Schauen wir uns die Syntax dieses -
anmapVariable [<the key="" value="">] = <the new="" value="">; </the></the>
Erstelltes Wörterbuch oder Karte D
Hat bereits den Schlüsselwert k
Der Wert v
Update wie D[ k ] = v
Zurück nach D
#include <iostream> #include <map> using namespace std; void display( map <string, int>& givenMap ){ for ( auto& it : givenMap ) { cout << "Key: " << it.first << ", value: " << it.second << endl; } } int main(){ map<string, int> givenMap; givenMap = { { "ABCD", 25 }, { "EFGH", 50 }, { "IJKL", 75 }, { "MNOP", 100 }, { "QRST", 125 } }; cout << "Before updation: " << endl; display( givenMap ); cout << "After Updation: " << endl; //update the value of MNOP to 500 givenMap[ "MNOP" ] = 500; display( givenMap ); }
Before updation: Key: ABCD, value: 25 Key: EFGH, value: 50 Key: IJKL, value: 75 Key: MNOP, value: 100 Key: QRST, value: 125 After Updation: Key: ABCD, value: 25 Key: EFGH, value: 50 Key: IJKL, value: 75 Key: MNOP, value: 500 Key: QRST, value: 125
Bei dieser Methode haben wir den Wert erfolgreich aktualisiert, indem wir auf den Schlüsselparameter zugegriffen haben. Allerdings ist dieser Vorgang möglicherweise nicht immer genau. Dieses Verfahren hat einen schwerwiegenden Nachteil: Der angegebene Schlüssel ist möglicherweise nicht in der Karte vorhanden. Durch diesen Vorgang wird jedoch ein neuer Schlüssel mit dem angegebenen Wert eingefügt. In der nächsten Methode werden wir also sehen, wie man ein Element nach einer erfolgreichen Suche sucht und aktualisiert.
Mit der Funktion find() im Kartenobjekt können Sie prüfen, ob ein bestimmter Schlüssel in der Karte vorhanden ist. Es wird eine Zeigerreferenz auf den Schlüssel zurückgegeben, andernfalls wird der Zeiger „end()“ auf die Karte zurückgegeben, was bedeutet, dass die Karte kein Element darin enthält. Schauen wir uns zum besseren Verständnis den Algorithmus und die Implementierung an.
Erstelltes Wörterbuch oder Karte D
Hat bereits den Schlüsselwert k
Der Wert v
Erstellen Sie ein Iteratorobjekt itr, um den Zeiger des Schlüssel-Wert-Paares abzurufen
Rufen Sie die Methode find() auf, um das Wörterbuch D in itr einzufügen
Wenn itr nicht das Ende von D ist, was bedeutet, dass der Schlüssel existiert, dann
Geben Sie v in itr ein
Ende wenn
#include <iostream> #include <map> using namespace std; void display( map <string, int>& givenMap ){ for ( auto& it : givenMap ) { cout << "Key: " << it.first << ", value: " << it.second << endl; } } void updateElement( map <string, int>& givenMap, string givenKey, int newValue ){ map <string, int>::iterator itr; itr = givenMap.find( givenKey ); if( itr != givenMap.end() ){ // when item has found itr->second = newValue; } } int main(){ map<string, int> givenMap; givenMap = { { "ABCD", 25 }, { "EFGH", 50 }, { "IJKL", 75 }, { "MNOP", 100 }, { "QRST", 125 } }; cout << "Before updation: " << endl; display( givenMap ); cout << "After Updation: " << endl; //update the value of MNOP to 500 updateElement( givenMap, "MNOP", 1580 ); display( givenMap ); }
Before updation: Key: ABCD, value: 25 Key: EFGH, value: 50 Key: IJKL, value: 75 Key: MNOP, value: 100 Key: QRST, value: 125 After Updation: Key: ABCD, value: 25 Key: EFGH, value: 50 Key: IJKL, value: 75 Key: MNOP, value: 1580 Key: QRST, value: 125
Bei dieser Methode verwendet die Funktion updateElement als Eingabe die Karte, den vorhandenen Schlüssel und den neuen Wert. Suchen Sie dann nach diesem Schlüssel. Aktualisieren Sie einfach den Wert, falls vorhanden, andernfalls leiten Sie ihn einfach von der Funktion ab. Mit dieser Methode können wir also keine neuen Einträge in der Karte erstellen, sondern nur bestehende Einträge aktualisieren.
In diesem Artikel haben wir gelernt, wie man Elemente in einer Karte mithilfe von Schlüsseln aktualisiert. Bei der ersten Methode verwenden wir die direkte Zuweisungsmethode, die das Element erfolgreich aktualisiert, aber auch neue Elemente hinzufügen kann, wenn der Schlüssel noch nicht vorhanden ist. Die zweite Methode beseitigt dieses Problem, indem sie zu Beginn eine einfache Suche durchführt. Manchmal bemerken wir möglicherweise, dass die zweite Methode mehr Zeit benötigt, um nach dem Schlüssel zu suchen und ihn dann zu aktualisieren. Daher ist mehr Suchzeit erforderlich als bei der ersten Methode. Aber wenn wir sorgfältig nachdenken, wird diese Entdeckung bei der ersten Methode im Wesentlichen auch realisiert. Da die Datenstruktur Hash-basierte Techniken verwendet, wird sie (in den meisten Fällen) in konstanter Zeit ausgeführt.
Das obige ist der detaillierte Inhalt vonC++-Programm zum Aktualisieren des Wörterbuchwerts nach Schlüssel. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!