Créer un dictionnaire en C++

Jinku Hu 12 octobre 2023
  1. Utiliser l’initialisateur List Constructor pour créer un dictionnaire en C++
  2. Utiliser le constructeur par défaut pour créer un dictionnaire en C++
  3. Utiliser le constructeur copy pour créer un dictionnaire en C++
  4. Utiliser le constructeur basé sur les plages pour créer un dictionnaire en C++
Créer un dictionnaire en C++

Cet article présente la manière de créer un dictionnaire en C++.

Utiliser l’initialisateur List Constructor pour créer un dictionnaire en C++

Dans la bibliothèque de conteneurs standard C++, un dictionnaire est nommé std::map, qui implémente des paires clé-valeur triées avec des clés uniques. Les opérations sur les éléments de la map comme la recherche, la suppression et l’insertion de paires ont une complexité logarithmique. Cette méthode utilise des parenthèses pour initialiser l’objet map avec des valeurs littérales. Notez que chaque paire d’éléments est séparée par la virgule, comme le montre l’exemple de code suivant.

#include <iostream>
#include <map>

using std::cin;
using std::copy;
using std::cout;
using std::endl;
using std::map;
using std::string;

template <typename Map>
void PrintMap(Map& m) {
  cout << "[ ";
  for (auto& item : m) {
    cout << item.first << ":" << item.second << " ";
  }
  cout << "]\n";
}

int main() {
  map<int, string> map1 = {{
                               1,
                               "Apple",
                           },
                           {
                               2,
                               "Banana",
                           },
                           {
                               3,
                               "Mango",
                           },
                           {
                               4,
                               "Raspberry",
                           },
                           {
                               5,
                               "Blackberry",
                           },
                           {
                               6,
                               "Cocoa",
                           }};

  cout << "map1 - ";
  PrintMap(map1);
  cout << endl;

  return EXIT_SUCCESS;
}

Production :

map1 - [ 1:Apple 2:Banana 3:Mango 4:Raspberry 5:Blackberry 6:Cocoa ]

Utiliser le constructeur par défaut pour créer un dictionnaire en C++

On peut aussi déclarer un objet de type map avec des paramètres donnés, puis initialiser chaque paire clé-valeur en utilisant une déclaration séparée. Dans cet exemple, nous démontrons une carte avec des clés int et les valeurs de string. On peut toujours mettre ces instructions dans la boucle ou prendre des valeurs de l’entrée utilisateur, ce qui correspondrait mieux à un scénario d’application réel.

#include <iostream>
#include <map>

using std::cin;
using std::copy;
using std::cout;
using std::endl;
using std::map;
using std::string;

template <typename Map>
void PrintMap(Map& m) {
  cout << "[ ";
  for (auto& item : m) {
    cout << item.first << ":" << item.second << " ";
  }
  cout << "]\n";
}

int main() {
  map<int, string> map2;
  map2[1] = "Banana";
  map2[2] = "Mango";
  map2[3] = "Cocoa";
  map2[4] = "Raspberry";

  cout << "map2 - ";
  PrintMap(map2);
  cout << endl;

  return EXIT_SUCCESS;
}

Production :

map2 - [ 1:Banana 2:Mango 3:Cocoa 4:Raspberry ]

Utiliser le constructeur copy pour créer un dictionnaire en C++

Une autre solution pour créer un nouvel objet map consiste à utiliser un constructeur copy, qui prend une autre variable map existante comme argument et copie les paires clé-valeur dans le nouvel objet initialisé. Notez que cette méthode ne déplace pas l’objet map existant et peut être réutilisée plus tard pendant l’exécution du programme.

#include <iostream>
#include <map>

using std::cin;
using std::copy;
using std::cout;
using std::endl;
using std::map;
using std::string;

template <typename Map>
void PrintMap(Map& m) {
  cout << "[ ";
  for (auto& item : m) {
    cout << item.first << ":" << item.second << " ";
  }
  cout << "]\n";
}

int main() {
  map<int, string> map1 = {{
                               1,
                               "Apple",
                           },
                           {
                               2,
                               "Banana",
                           },
                           {
                               3,
                               "Mango",
                           },
                           {
                               4,
                               "Raspberry",
                           },
                           {
                               5,
                               "Blackberry",
                           },
                           {
                               6,
                               "Cocoa",
                           }};

  map<int, string> map3(map1);

  cout << "map3 - ";
  PrintMap(map3);
  cout << endl;

  return EXIT_SUCCESS;
}

Production :

map3 - [ 1:Apple 2:Banana 3:Mango 4:Raspberry 5:Blackberry 6:Cocoa ]

Utiliser le constructeur basé sur les plages pour créer un dictionnaire en C++

Le constructeur basé sur la gamme est une autre alternative aux méthodes précédentes. Cette solution peut être utilisée pour initialiser une nouvelle variable map avec les paires clé-valeur d’un sous-ensemble d’un objet map existant. Dans cet exemple, nous utilisons la méthode find pour spécifier la première paire clé-valeur de l’intervalle. Par conséquent, une nouvelle variable map2 contient des paires allant de la valeur clé 2 au dernier élément de l’objet map1.

#include <iostream>
#include <map>

using std::cin;
using std::copy;
using std::cout;
using std::endl;
using std::map;
using std::string;

template <typename Map>
void PrintMap(Map& m) {
  cout << "[ ";
  for (auto& item : m) {
    cout << item.first << ":" << item.second << " ";
  }
  cout << "]\n";
}

int main() {
  map<int, string> map1 = {{
                               1,
                               "Apple",
                           },
                           {
                               2,
                               "Banana",
                           },
                           {
                               3,
                               "Mango",
                           },
                           {
                               4,
                               "Raspberry",
                           },
                           {
                               5,
                               "Blackberry",
                           },
                           {
                               6,
                               "Cocoa",
                           }};

  map<int, string> map4(map1.find(2), map1.end());

  cout << "map4 - ";
  PrintMap(map4);
  cout << endl;

  return EXIT_SUCCESS;
}

Production :

map4 - [ 2:Banana 3:Mango 4:Raspberry 5:Blackberry 6:Cocoa ]
Auteur: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook