Verwenden eine STL-Map-Container in C++

Jinku Hu 12 Oktober 2023
  1. Verwenden von std::map zur Deklaration eines Map-Container-Objekts in C++
  2. Verwenden der Member-Funktion find zum Suchen eines bestimmten Elements in einer Map in C++
  3. Verwenden der Memberfunktion insert zum Speichern eines Elements in einer Map in C++
  4. Verwenden der Memberfunktion merge zum Verbinden von Elementen zweier Map-Objekte in C++
Verwenden eine STL-Map-Container in C++

Diese Anleitung zeigt Ihnen mehrere Methoden, wie Sie den STL-Map-Container in C++ verwenden können.

Verwenden von std::map zur Deklaration eines Map-Container-Objekts in C++

Der Container std::map implementiert eine sortierte Schlüssel-Wert-Paar-Datenstruktur, in der Schlüssel eindeutig sind. Schlüsselwerte sortieren Paarelemente standardmäßig in aufsteigender Reihenfolge; der Benutzer kann jedoch optional eine Vergleichsfunktion an die Vorlage std::map übergeben. Sie können das Objekt map mit einer Liste von Werten initialisieren, wobei jedes Element in separaten geschweiften Klammern angegeben wird. In diesem Fall erstellen wir eine Karte von string-Paaren und drucken dann Elemente davon in den cout-Stream. Beachten Sie, dass auf jedes Element als std::pair-Elemente in der for-Schleife zugegriffen wird.

#include <iostream>
#include <map>

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

template <typename Map>
void printMap(Map& m) {
  for (auto& p : m) cout << p.first << " : " << p.second << ";" << endl;
  cout << endl;
}

int main() {
  std::map<string, string> m1 = {
      {"11900K", "Core i9"},
      {"11700K", "Core i7"},
      {"11600K", "Core i5"},
      {"1390P", "Xeon W"},
  };

  printMap(m1);

  return EXIT_SUCCESS;
}

Ausgabe:

11600K : Core i5;
11700K : Core i7;
11900K : Core i9;
1390P : Xeon W;

Verwenden der Member-Funktion find zum Suchen eines bestimmten Elements in einer Map in C++

Die Memberfunktion find ist nützlich, um ein bestimmtes Schlüssel-Wert-Paar im Container map zu suchen. Die Nachschlageoperation hat logarithmische Komplexität. Die Funktion find nimmt die Referenz auf einen Schlüssel und gibt den Iterator zum Element mit dem entsprechenden Schlüssel zurück. Wenn kein Element mit dem angegebenen Schlüssel gefunden wird, wird ein Iterator nach dem Ende zurückgegeben.

Der folgende Codeausschnitt zeigt, wie Sie einen neuen map-Container mit den Range-Iteratoren initialisieren. Beachten Sie, dass der erste Iterator mit der Funktion find abgerufen wird. Außerdem kann es hilfreich sein, den zurückgegebenen Iterator auf Gültigkeit zu überprüfen.

#include <cassert>
#include <iostream>
#include <map>

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

template <typename Map>
void printMap(Map& m) {
  for (auto& p : m) cout << p.first << " : " << p.second << ";" << endl;
  cout << endl;
}

int main() {
  std::map<string, string> m1 = {
      {"11900K", "Core i9"},
      {"11700K", "Core i7"},
      {"11600K", "Core i5"},
      {"1390P", "Xeon W"},
  };

  std::map<string, string> m2(m1.find("11700K"), m1.end());
  printMap(m2);

  auto ret = m1.find("11700K");
  assert(ret != m1.end());
  std::map<string, string> m3(ret, m1.end());
  printMap(m3);

  return EXIT_SUCCESS;
}

Ausgabe:

11700K : Core i7;
11900K : Core i9;
1390P : Xeon W;

Verwenden der Memberfunktion insert zum Speichern eines Elements in einer Map in C++

Mit der Member-Funktion insert können Sie dem bestehenden map-Container neue Elemente hinzufügen. Das Member insert nimmt die Referenz auf das hinzuzufügende Objekt und gibt einen Container std::pair zurück, der aus einem Iterator zum eingefügten Element und dem Wert bool besteht, der den erfolgreichen Einfügestatus anzeigt. Wenn das Einfügen fehlschlägt, zeigt der Iterator auf das Element, das den Vorgang verhindert hat.

#include <iostream>
#include <map>

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

template <typename Map>
void printMap(Map& m) {
  for (auto& p : m) cout << p.first << " : " << p.second << ";" << endl;
  cout << endl;
}

int main() {
  std::map<string, string> m1 = {
      {"11900K", "Core i9"},
      {"11700K", "Core i7"},
      {"11600K", "Core i5"},
      {"1390P", "Xeon W"},
  };

  auto ret1 = m1.insert({"1390P", "Xeon W"});
  if (!ret1.second) {
    cout << "Not inserted!" << endl;
  }

  ret1 = m1.insert({"1390", "Xeon W"});
  if (!ret1.second) {
    cout << "Not inserted!" << endl;
  }
  printMap(m1);

  return EXIT_SUCCESS;
}

Ausgabe:

Not inserted!
11600K : Core i5;
11700K : Core i7;
11900K : Core i9;
1390 : Xeon W;
1390P : Xeon W;

Verwenden der Memberfunktion merge zum Verbinden von Elementen zweier Map-Objekte in C++

Die Member-Funktion merge kann verwendet werden, um die Elemente aus zwei Map-Containern zu verbinden. Es wird vom map-Objekt aufgerufen, das die kombinierten Elemente speichern muss und nimmt eine andere map als Argument. Nach der Operation sind alle Zeiger und Referenzen auf übergebene Elemente gültig.

#include <iostream>
#include <map>

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

template <typename Map>
void printMap(Map& m) {
  for (auto& p : m) cout << p.first << " : " << p.second << ";" << endl;
  cout << endl;
}

int main() {
  std::map<string, string> m1 = {
      {"11900K", "Core i9"},
      {"11700K", "Core i7"},
      {"11600K", "Core i5"},
      {"1390P", "Xeon W"},
  };

  std::map<string, string> m4 = {
      {"11900KF", "Core i9"}, {"11600T", "Core i5"}, {"11700K", "Core i7"}};

  m1.merge(m4);
  printMap(m1);

  return EXIT_SUCCESS;
}

Ausgabe:

11600K : Core i5;
11600T : Core i5;
11700K : Core i7;
11900K : Core i9;
11900KF : Core i9;
1390P : Xeon W;
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

Verwandter Artikel - C++ Map