C++ STL Set und Multiset

Einführung in C++ STL assoziative Container mit Set und Multiset Container, zum schnellen suchen, einfügen und löschen von Elementen.



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;
}