Verwendung von den STL-Set-Container in C++
-
Verwenden Sie
std::set
, um Set Container Object in C++ zu deklarieren -
Verwenden Sie die Member-Funktion
insert
, um ein Element in eine Menge in C++ einzufügen -
Verwenden Sie die Member-Funktion
find
, um den Iterator des Elements mit dem angegebenen Schlüssel in C++ abzurufen -
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
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
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