Verwendung von den STL-Set-Container in C++

Jinku Hu 12 Oktober 2023
  1. Verwenden Sie std::set, um Set Container Object in C++ zu deklarieren
  2. Verwenden Sie die Member-Funktion insert, um ein Element in eine Menge in C++ einzufügen
  3. Verwenden Sie die Member-Funktion find, um den Iterator des Elements mit dem angegebenen Schlüssel in C++ abzurufen
  4. Verwenden Sie die Member-Funktion contains, um zu überprüfen, ob das Element mit dem angegebenen Schlüssel in einer Menge in C++ vorhanden ist
Verwendung von den STL-Set-Container in C++

Dieser Artikel zeigt mehrere Methoden zur Verwendung des STL-Containers set in C++.

Verwenden Sie std::set, um Set Container Object in C++ zu deklarieren

Der Befehl std::set implementiert einen sortierten Satz eindeutiger Objekte als assoziativen Container. Elemente werden standardmäßig mit der Vergleichsfunktion std::less sortiert, aber der Benutzer kann die benutzerdefinierte Funktion als zweites Vorlagenargument angeben. Der gleiche Header stellt auch den Container std::multiset bereit, der die mehreren Werte speichern kann, ohne Duplikate zu filtern.

Beachten Sie, dass wir im folgenden Beispiel beide Mengenobjekte mit dem Initialisierungslistenkonstruktor erstellen. Wir verwenden auch die Member-Funktion count, die die Anzahl der Elemente abruft, die in der Menge mit dem angegebenen Schlüssel vorhanden sind. Diese Funktion gehört eher zum Container std::multiset, aber Sie können überprüfen, ob das Element mit derselben Funktion existiert, wenn es vom std::set-Objekt aufgerufen wird.

#include <iostream>
#include <set>

using std::cout;
using std::endl;
using std::multiset;
using std::set;

template <typename T>
void printSet(set<T> s) {
  for (const auto &item : s) {
    cout << item << "; ";
  }
  cout << endl;
}

template <typename T>
void printMultiSet(multiset<T> s) {
  for (const auto &item : s) {
    cout << item << "; ";
  }
  cout << endl;
}

#define STR(num) #num

int main() {
  std::set<int> s1 = {1, 1, 1, 2, 2, 3};
  printSet(s1);

  std::multiset<int> s2 = {1, 1, 1, 2, 2, 3};
  printMultiSet(s2);
  std::cout << STR(s2) << " contains " << s2.count(1) << "ones" << endl;
  std::cout << STR(s2) << " contains " << s2.count(2) << "twos" << endl;

  return EXIT_SUCCESS;
}

Ausgabe:

1; 2; 3;
1; 1; 1; 2; 2; 3;
s2 contains 3 ones
s2 contains 2 twos

Verwenden Sie die Member-Funktion insert, um ein Element in eine Menge in C++ einzufügen

Die Funktion insert hat mehrere Überladungen, aber wir verwenden die Version, die ein einzelnes Argument verwendet, das das Element darstellt, das der Menge hinzugefügt werden soll. Diese Überladung von insert gibt das std::pair-Objekt des Iterators und den bool zurück.

Letzteres zeigt an, ob das Einfügen erfolgreich war, und wenn ja, hat es den Wert true. Andererseits zeigt der Iterator auf das eingefügte Element, wenn die Operation erfolgreich ist. Wenn es fehlschlägt, zeigt es auf das Element, das das Einfügen verhindert hat. Beachten Sie, dass die Einfügeoperation eine logarithmische Komplexität in der Größe des Containers hat.

#include <cassert>
#include <iostream>
#include <set>

using std::cout;
using std::endl;
using std::multiset;
using std::set;

int main() {
  std::set<int> s1 = {1, 1, 1, 2, 2, 3};

  auto ret = s1.insert(5);
  assert(*ret.first == 5);
  if (ret.second) std::cout << "Inserted!" << endl;

  ret = s1.insert(1);
  assert(*ret.first == 1);
  if (!ret.second) std::cout << "Not inserted!" << endl;

  return EXIT_SUCCESS;
}

Ausgabe:

Inserted!
Not inserted!

Verwenden Sie die Member-Funktion find, um den Iterator des Elements mit dem angegebenen Schlüssel in C++ abzurufen

Die Funktion find ist eine weitere nützliche Member-Funktion des Containers std::set, die den Iterator zum Element mit dem angegebenen Schlüssel zurückgeben kann. Wenn kein solches Element in der Menge vorhanden ist, wird der Iterator nach dem Ende zurückgegeben; Dies hilft dem Benutzer, den erfolgreichen Funktionsaufruf zu überprüfen.

#include <iostream>
#include <set>

using std::cout;
using std::endl;
using std::multiset;
using std::set;

int main() {
  std::set<int> s1 = {1, 1, 1, 2, 2, 3};

  auto search = s1.find(2);
  if (search != s1.end()) {
    cout << "Found " << (*search) << endl;
  } else {
    cout << "Not found" << endl;
  }

  return EXIT_SUCCESS;
}

Ausgabe:

Found 2

Verwenden Sie die Member-Funktion contains, um zu überprüfen, ob das Element mit dem angegebenen Schlüssel in einer Menge in C++ vorhanden ist

Seit dem Sprachstandard C++20 bietet std::set die Member-Funktion contains, die die einfachere Schnittstelle ist, um zu überprüfen, ob das Element mit dem angegebenen Schlüssel im set-Objekt existiert. Die Funktion gibt den booleschen Wert zurück, um anzuzeigen, ob ein solches Element in der Menge vorhanden ist. Die Laufzeitkomplexität dieser Funktion ist ebenfalls logarithmisch in der Größe des Containers.

#include <iostream>
#include <set>

using std::cout;
using std::endl;
using std::multiset;
using std::set;

int main() {
  std::set<int> s3 = {91, 123, 63, 122, 22, 53};

  for (int x : {22, 23, 53, 54}) {
    if (s3.contains(x)) {
      cout << x << ": Found\n";
    } else {
      cout << x << ": Not found\n";
    }
  }

  return EXIT_SUCCESS;
}

Ausgabe:

22: Found
23: Not found
53: Found
54: Not found
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++ Set