De nombreux langages informatiques fournissent un dictionnaire, qui est une structure de données. Le dictionnaire est une structure de données plus rapide qui stocke les données en fonction de clés et de valeurs. Il préserve les combinaisons clé-valeur afin que les clés puissent être facilement recherchées pour certains composants en temps quasi réel. La norme de langage C++ STL inclut des structures de données de type dictionnaire. Le terme « map » est utilisé pour décrire cette structure de données. Cette carte crée une paire de clés et de valeurs de n'importe quel type (puisque nous utilisons C++, les types doivent être définis avant la compilation). Cette section montre comment mettre à jour les valeurs d'une carte ou d'un dictionnaire existant en C++.
Examinons d’abord la définition de la structure des données cartographiques. Ces modèles internes nécessitent deux types différents. La syntaxe et les bibliothèques nécessaires sont indiquées ci-dessous -
#include <map> map<type1, type2=""> mapVariable; </type1,></map>
Dans ce cas, nous devons importer la bibliothèque "map" pour utiliser la structure des données cartographiques. Pour cela, les types de données 1 et 2 sont requis. Le type de données du paramètre key est type1 et le type de données du paramètre value est type2. Ici, l'objet dérivé de la classe de type map est mapVariable. Voyons maintenant comment l'obtenir à l'aide du mappage C++.
Dans la structure des données cartographiques, nous pouvons mettre des valeurs dans la carte en accédant à la clé existante ou à la nouvelle clé. Puisque nous parlons ici de mise à jour des valeurs, nous devons mettre à jour la clé existante. Les clés seront utilisées entre crochets comme la notation d’index de tableau. Regardons la syntaxe de ceci -
mapVariable [<the key="" value="">] = <the new="" value="">; </the></the>
Création d'un dictionnaire ou d'une carte D
A déjà une valeur clé k
La valeur v
Mise à jour comme D[ k ] = v
Retour à 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
Dans cette méthode, nous avons réussi à mettre à jour la valeur en accédant au paramètre clé. Cependant, ce processus n’est pas toujours précis. Cette procédure présente un sérieux inconvénient, à savoir que la clé donnée peut ne pas exister dans la carte. Mais en utilisant ce processus, il insérera une nouvelle clé avec une valeur donnée. Ainsi, dans la méthode suivante, nous verrons comment rechercher et mettre à jour un élément après une recherche réussie.
Vous pouvez utiliser la fonction find() dans l'objet carte pour vérifier si une certaine clé existe dans la carte. Il renverra une référence de pointeur vers la clé, sinon il renverra le pointeur "end()" vers la carte, ce qui indique que la carte ne contient aucun élément en son sein. Voyons l'algorithme et la mise en œuvre pour une meilleure compréhension.
Création d'un dictionnaire ou d'une carte D
A déjà une valeur clé k
La valeur v
Créez un objet itérateur itr pour obtenir le pointeur de la paire clé-valeur
Appelez la méthode find() pour mettre le dictionnaire D dans itr
Si itr n'est pas la fin de D, ce qui signifie que la clé existe, alors
Mettez v dans itr
Fin si
#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
Dans cette méthode, la fonction updateElement prend en entrée la carte, la clé existante et la nouvelleValue. Recherchez ensuite cette clé. Mettez simplement à jour la valeur si elle existe, sinon dérivez-la simplement de la fonction. Ainsi, en utilisant cette méthode, nous ne pouvons pas créer de nouvelles entrées dans la carte mais pouvons uniquement mettre à jour les entrées existantes.
Dans cet article, nous avons appris comment mettre à jour des éléments d'une carte à l'aide de clés. Dans la première méthode, nous utilisons la méthode d'affectation directe, qui met à jour l'élément avec succès, mais elle peut également ajouter de nouveaux éléments lorsque la clé n'existe pas encore. La deuxième méthode élimine ce problème en commençant par une simple recherche. Parfois, nous pouvons remarquer que la deuxième méthode prend plus de temps pour rechercher la clé puis la mettre à jour. Elle nécessite donc plus de temps de recherche que la première méthode. Mais si l’on y réfléchit bien, dans la première méthode, cette découverte est aussi essentiellement réalisée. Étant donné que la structure de données utilise des techniques basées sur le hachage, elle s'exécutera en temps constant (dans la plupart des cas).
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!