Verwendung von die std::map::find-Funktion in C++

Jinku Hu 12 Oktober 2023
  1. Verwenden Sie die Funktion std::map::find, um das Element mit einem bestimmten Schlüsselwert in C++ zu finden
  2. Verwenden Sie die Member-Funktion contains, um zu überprüfen, ob das angegebene Element in einer Map in C++ vorhanden ist
Verwendung von die std::map::find-Funktion in C++

Dieser Artikel erklärt, wie Sie die Funktion std::map::find und einige ihrer Alternativen in C++ verwenden.

Verwenden Sie die Funktion std::map::find, um das Element mit einem bestimmten Schlüsselwert in C++ zu finden

Das Objekt std::map ist einer der assoziativen Container in der Standard-Template-Bibliothek von C++ und implementiert eine sortierte Datenstruktur, in der Schlüsselwerte gespeichert werden. Beachten Sie, dass Schlüssel im Container std::map eindeutig sind. Wenn also mit den vorhandenen Schlüsseln neue Elemente eingefügt werden, hat die Operation keine Auswirkung. Dennoch können einige spezielle Memberfunktionen in der Klasse std::map den bestehenden Paaren neue Werte zuweisen, wenn die Schlüssel übereinstimmen (z. B. Funktion insert_or_assign).

Zu den Vorteilen des Containers std::map gehören schnelle Such-, Einfüge- und Entfernungsoperationen, die in logarithmischer Zeit durchgeführt werden können. Die Suchoperation wird vom Member find bereitgestellt, der eine Referenz auf einen Schlüssel akzeptiert. Wird der angegebene Schlüssel im std::map-Objekt gefunden, wird der Iterator zum entsprechenden Element zurückgegeben. Angenommen, der angegebene Schlüssel wird im Container nicht gefunden, wird der Iterator nach dem Ende (map::end()) zurückgegeben.

Der folgende Codeausschnitt demonstriert ein einfaches Anwendungsszenario, bei dem ein map-Container von string-Paaren mit beliebigen Werten initialisiert und dann der Schlüssel mit dem Wert "h" gesucht wird. Folglich verarbeiten wir den zurückgegebenen Iterator mit der Anweisung if-else, um entweder das Elementpaar zu drucken oder eine Meldung auszugeben, dass der angegebene Schlüssel nicht gefunden wurde.

#include <iostream>
#include <map>

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

int main() {
  std::map<string, string> m1 = {
      {"h", "htop"}, {"k", "ktop"}, {"t", "ttop"},
      {"r", "rtop"}, {"w", "wtop"}, {"p", "ptop"},
  };

  string key = "h";

  auto item = m1.find(key);
  if (item != m1.end()) {
    cout << "Key exists!  -  {" << item->first << ";" << item->second << "}\n";
  } else {
    cout << "Key does not exist!" << endl;
  }

  return EXIT_SUCCESS;
}

Ausgabe:

Key exists!  -  {h;htop}

Verwenden Sie die Member-Funktion contains, um zu überprüfen, ob das angegebene Element in einer Map in C++ vorhanden ist

Wenn der Benutzer bestätigen muss, ob das Paar mit dem angegebenen Wert im Objekt map existiert, kann man die Member-Funktion contains verwenden. Die Funktion ist seit der C++20-Version Teil des std::map-Containers, daher sollten Sie die Compiler-Version kennen, um den folgenden Codeausschnitt auszuführen. Die Funktion contains nimmt eine Referenz auf den Schlüssel und gibt den bool-Wert true zurück, wenn er gefunden wird. Die Zeitkomplexität dieser Memberfunktion ist ebenfalls logarithmisch.

#include <iostream>
#include <map>

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

int main() {
  std::map<string, string> m1 = {
      {"h", "htop"}, {"k", "ktop"}, {"t", "ttop"},
      {"r", "rtop"}, {"w", "wtop"}, {"p", "ptop"},
  };

  string key = "h";

  if (m1.contains(key)) {
    cout << "Key Exists!" << endl;
  } else {
    cout << "Key does not exist!" << endl;
  }

  return EXIT_SUCCESS;
}

Ausgabe:

Key Exists!

Alternativ kann man mit der Member-Funktion cout prüfen, ob das Elementpaar mit dem angegebenen Schlüssel in der map existiert. Im Allgemeinen wird die Funktion cout verwendet, um die Anzahl der Elemente mit dem angegebenen Schlüssel abzurufen, aber da die std::map nur eindeutige Schlüsselwerte speichert, gibt der Prozess 1 zurück, wenn das Element gefunden wird. Andernfalls wird ein Nullwert zurückgegeben, um anzuzeigen, dass kein Element gefunden wurde.

#include <iostream>
#include <map>

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

int main() {
  std::map<string, string> m1 = {
      {"h", "htop"}, {"k", "ktop"}, {"t", "ttop"},
      {"r", "rtop"}, {"w", "wtop"}, {"p", "ptop"},
  };

  string key = "h";

  if (m1.count(key)) {
    cout << "Key Exists!" << endl;
  } else {
    cout << "Key does not exist!" << endl;
  }

  return EXIT_SUCCESS;
}

Ausgabe:

Key Exists!
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