Set und Multiset sind assoziative Container der STL (Standard Template Library). Sie dienen zum schnellen suchen löschen und einfügen von Einträgen.
Set- und Multiset-Container werden hierbei den Elementen entsprechend sortiert (im Gegensatz zu Map und Multimap, welche nach Schlüssel sortiert werden).
Set und Multiset unterscheiden sich in der Tatsache, dass in einem Set-Container jedes Element nur einmal (ein Key besitzt genau ein Value) - und bei einem Multiset-Container ein und das Selbe Element auch mehrmals vorkommen darf (ein Key darf mehrere Values besitzen). Würde man also die Zahlen von 1-100 in einem Set speichern, darf jede Zahl nur einmal vorkommen. Würde wir es in einem Multimap speichern, dürfte die 100 beispielsweise auch mehrmals vorkommen.
#include <set> // Beispiel eines Set-Containers int main() { // Feld anlegen und mit Daten füllen const int size = 10; int arr[size] = {9,4,1,4,3,4,5,6,7,9}; // Set s mit Feld arr initialisiert set<int> s(arr, arr + size); // Set über Iterator-Zugriff ausgeben set<int>::iterator it; for (it = s.begin(); it != s.end(); it++) cout << *it << ", "; return 0; }
#include <set> // Beispiel eines Multiset-Containers int main() { // Feld anlegen und mit Daten füllen const int size = 10; int arr[size] = {9,4,1,4,3,4,5,6,7,9}; // Multiset m mit Feld arr initialisiert multiset<int> m(arr, arr + size); // Multiset m über Iterator-Zugriff ausgeben multiset<int>::iterator it_m; for (it_m = m.begin(); it_m != m.end(); it_m++) cout << *it_m << ", "; // Alle Vorkommen von 4 in m suchen pair<multiset<int>::iterator,multiset<int>::iterator> it_pair; it_pair = m.equal_range(4); for (it_m = it_pair.first; it_m != it_pair.second; it_m++) cout << *it_m << ", "; // Alle Vorkommen von 4 bis auf eines löschen m.erase(++it_pair.first,it_pair.second); for (it_m = m.begin(); it_m != m.end(); it_m++) cout << *it_m << ", "; return 0; }