std::set
Geordnete eindeutige Elemente
std::set ist eine kostenlose C++ Academy-Lektion auf CoddyKit. Dies ist Lektion 2 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des C++ Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der C++ Academy-Kurs umfasst insgesamt 4 Lektionen.
Was ist std::set?
std::set speichert eindeutige Elemente in sortierter Reihenfolge. Es gibt keine Duplikate, und Suchen erfolgen in logarithmischer Zeit.
- Die Schlüssel sind zugleich die Werte.
- Ideal für Mitgliedschaftsprüfungen und das Entfernen von Duplikaten.
#include <iostream>
#include <set>
int main() {
std::set<int> s{3, 1, 2, 1, 3};
for (int x : s) std::cout << x << ' ';
std::cout << '\n';
return 0;
}Werte einfügen
Verwenden Sie insert(), um Elemente hinzuzufügen. Das Einfügen eines bereits vorhandenen Werts wird einfach ignoriert.
#include <iostream>
#include <set>
int main() {
std::set<std::string> s;
s.insert("apple");
s.insert("banana");
s.insert("apple");
std::cout << s.size() << " unique items\n";
return 0;
}Rückgabewert von insert
insert() gibt ein pair zurück, dessen .second-Wert ein boolescher Wert ist, der angibt, ob das Einfügen tatsächlich stattgefunden hat.
#include <iostream>
#include <set>
int main() {
std::set<int> s{1, 2};
auto r = s.insert(2);
std::cout << std::boolalpha << "inserted: " << r.second << '\n';
auto r2 = s.insert(5);
std::cout << "inserted: " << r2.second << '\n';
return 0;
}Mitgliedschaft prüfen
Verwenden Sie count() oder in C++20 contains(), um zu prüfen, ob ein Wert vorhanden ist.
#include <iostream>
#include <set>
int main() {
std::set<int> s{10, 20, 30};
std::cout << s.count(20) << '\n';
std::cout << s.count(99) << '\n';
return 0;
}Elemente finden
find() gibt einen Iterator auf das passende Element zurück oder end(), wenn es nicht vorhanden ist.
#include <iostream>
#include <set>
int main() {
std::set<std::string> s{"red", "green", "blue"};
auto it = s.find("green");
std::cout << (it != s.end() ? "found" : "missing") << '\n';
return 0;
}Elemente löschen
erase() entfernt einen Wert anhand des Schlüssels und gibt zurück, wie viele Werte entfernt wurden (0 oder 1).
#include <iostream>
#include <set>
int main() {
std::set<int> s{1, 2, 3, 4};
s.erase(3);
for (int x : s) std::cout << x << ' ';
std::cout << '\n';
return 0;
}Sortierte Reihenfolge
Elemente werden immer in aufsteigender Reihenfolge durchlaufen, unabhängig davon, in welcher Reihenfolge sie eingefügt wurden.
#include <iostream>
#include <set>
int main() {
std::set<int> s{50, 10, 40, 20, 30};
for (int x : s) std::cout << x << ' ';
std::cout << '\n';
return 0;
}Daten deduplizieren
Werte in ein Set einzufügen ist eine schnelle Möglichkeit, Duplikate zu entfernen und gleichzeitig zu sortieren.
#include <iostream>
#include <set>
#include <vector>
int main() {
std::vector<int> v{4, 2, 4, 1, 2, 3, 1};
std::set<int> unique(v.begin(), v.end());
for (int x : unique) std::cout << x << ' ';
std::cout << '\n';
return 0;
}lower_bound und upper_bound
Da das Set geordnet ist, können Sie mit lower_bound() und upper_bound() Bereiche effizient finden.
#include <iostream>
#include <set>
int main() {
std::set<int> s{10, 20, 30, 40, 50};
auto lo = s.lower_bound(20);
auto hi = s.upper_bound(40);
for (auto it = lo; it != hi; ++it) std::cout << *it << ' ';
std::cout << '\n';
return 0;
}Größe und Leeren
size() gibt die Anzahl der Elemente an, empty() prüft, ob keine Elemente vorhanden sind, und clear() entfernt alle Elemente.
#include <iostream>
#include <set>
int main() {
std::set<int> s{1, 2, 3};
std::cout << s.size() << '\n';
s.clear();
std::cout << std::boolalpha << s.empty() << '\n';
return 0;
}Bereich einfügen
Sie können einen ganzen Bereich aus einem anderen Container einfügen; Duplikate werden dabei automatisch entfernt und die Werte sortiert.
#include <iostream>
#include <set>
int main() {
std::set<int> s{1, 2, 3};
int more[] = {3, 4, 5};
s.insert(more, more + 3);
for (int x : s) std::cout << x << ' ';
std::cout << '\n';
return 0;
}Kurze Überprüfung
Testen Sie Ihr Verständnis des Verhaltens von std::set.
Zusammenfassung
Sie haben gelernt, dass std::set:
- Eindeutige, sortierte Werte enthält
- doppelte Einfügevorgänge stillschweigend ignoriert
find,count,erasesowie geordnete Abfragen mitlower_bound/upper_boundunterstützt
Als Nächstes lernen Sie multimap und multiset kennen, die Duplikate erlauben.
Häufig gestellte Fragen
Ist die Lektion „std::set“ kostenlos?
Ja — der vollständige Text von „std::set“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des C++ Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der C++ Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „std::set“?
Geordnete eindeutige Elemente Du übst C++ Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um C++ Academy zu starten?
Keine Vorkenntnisse erforderlich. C++ Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 2 von 4.
Wie lange dauert die Lektion „std::set“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser C++ Academy-Lektion Code schreiben und ausführen?
Ja. Jede C++ Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.