Erstellen eines Dictionary in C++

Jinku Hu 12 Oktober 2023
  1. Verwenden des Initialisierungslisten-Konstruktors zum Erstellen eines Dictionary in C++
  2. Verwenden des Default-Konstruktors zum Erstellen eines Dictionaries in C++
  3. Verwenden des copy-Konstruktors zum Erstellen eines Dictionaries in C++
  4. Verwenden des bereichsbasierten Konstruktors zum Erstellen eines Dictionaries in C++
Erstellen eines Dictionary in C++

Dieser Artikel führt in die Erstellung eines Dictionary in C++ ein.

Verwenden des Initialisierungslisten-Konstruktors zum Erstellen eines Dictionary in C++

In der C++-Standard-Container-Bibliothek wird ein Dictionary std::map genannt, das sortierte Schlüssel-Wert-Paare mit eindeutigen Schlüsseln implementiert. Operationen auf den map-Elementen wie Suchen, Entfernen und Einfügen von Paaren haben logarithmische Komplexität. Diese Methode verwendet geschweifte Klammern, um das map-Objekt mit den literalen Werten zu initialisieren. Beachten Sie, dass jedes Elementpaar durch ein Komma getrennt wird, wie im folgenden Codebeispiel gezeigt.

#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;
}

Ausgabe:

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

Verwenden des Default-Konstruktors zum Erstellen eines Dictionaries in C++

Alternativ kann man ein Objekt vom Typ map mit gegebenen Parametern deklarieren und dann jedes Schlüssel-Wert-Paar mit einer separaten Anweisung initialisieren. In diesem Beispiel zeigen wir eine Map mit int-Schlüsseln und den Werten von string-s. Man kann diese Anweisungen jederzeit in die Schleife einfügen oder Werte aus der Benutzereingabe übernehmen, was einem realen Anwendungsszenario besser entsprechen würde.

#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;
}

Ausgabe:

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

Verwenden des copy-Konstruktors zum Erstellen eines Dictionaries in C++

Eine andere Möglichkeit, ein neues map-Objekt zu erstellen, ist die Verwendung eines copy-Konstruktors, der eine andere vorhandene map-Variable als Argument nimmt und die Schlüssel-Wert-Paare in das neu initialisierte Objekt kopiert. Beachten Sie, dass diese Methode das bestehende map-Objekt nicht verschiebt und später während der Programmausführung wiederverwendet werden kann.

#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;
}

Ausgabe:

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

Verwenden des bereichsbasierten Konstruktors zum Erstellen eines Dictionaries in C++

Der bereichsbasierte Konstruktor ist eine weitere Alternative zu den vorherigen Methoden. Diese Lösung kann verwendet werden, um eine neue map-Variable mit der Teilmenge von Schlüssel-Wert-Paaren eines vorhandenen map-Objekts zu initialisieren. In diesem Beispiel verwenden wir die Methode find, um das erste Schlüssel-Wert-Paar im Bereich anzugeben. Folglich enthält eine neue map2-Variable Paare beginnend mit dem Schlüsselwert 2 bis zum letzten Element des map1-Objekts.

#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;
}

Ausgabe:

map4 - [ 2:Banana 3:Mango 4:Raspberry 5:Blackberry 6:Cocoa ]
Autor: 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