Namensräume
Varianten
Aktionen

std::set

Von cppreference.com
< cpp‎ | container
 
 
 
 
Definiert in Header <set>
template<

    class Key,
    class Compare = std::less<Key>,
    class Allocator = std::allocator<Key>

> class set;
(1)
namespace pmr {

    template<
        class Key,
        class Compare = std::less<Key>
    > using set = std::set<Key, Compare, std::pmr::polymorphic_allocator<Key>>;

}
(2) (seit C++17)

std::set ist ein assoziativer Container, der eine sortierte Menge eindeutiger Objekte vom Typ Key enthält. Die Sortierung erfolgt mithilfe der Vergleichsfunktion Compare. Such-, Entfernungs- und Einfügeoperationen haben logarithmische Komplexität. Sets werden normalerweise als Rot-Schwarz-Bäume implementiert.

Überall dort, wo die Standardbibliothek die Compare-Anforderungen verwendet, wird die Eindeutigkeit durch die Äquivalenzrelation bestimmt. Ungenau ausgedrückt, werden zwei Objekte a und b als äquivalent betrachtet, wenn keines von beiden kleiner als das andere ist: !comp(a, b) && !comp(b, a).

std::set erfüllt die Anforderungen von Container, AllocatorAwareContainer, AssociativeContainer und ReversibleContainer.

Alle Memberfunktionen von std::set sind constexpr: Es ist möglich, std::set-Objekte in der Auswertung eines konstanten Ausdrucks zu erstellen und zu verwenden.

Jedoch können std::set-Objekte im Allgemeinen nicht constexpr sein, da jeder dynamisch zugewiesene Speicher im selben konstanten Ausdruck freigegeben werden muss.

(seit C++26)

Inhalt

[edit] Template-Parameter

[edit] Member-Typen

Typ Definition
key_type Key[edit]
value_type Key[edit]
size_type Vorzeichenloser Ganzzahltyp (normalerweise std::size_t)[edit]
difference_type Vorzeichenbehafteter Ganzzahltyp (normalerweise std::ptrdiff_t)[edit]
key_compare Compare[edit]
value_compare Compare[edit]
allocator_type Allocator[edit]
Referenz value_type&[edit]
const_reference const value_type&[edit]
Zeiger

Allocator::pointer

(bis C++11)

std::allocator_traits<Allocator>::pointer

(seit C++11)
[Bearbeiten]
const_pointer

Allocator::const_pointer

(bis C++11)

std::allocator_traits<Allocator>::const_pointer

(seit C++11)
[Bearbeiten]
iterator Konstanter LegacyBidirectionalIterator und ConstexprIterator(seit C++26) zu value_type[edit]
const_iterator LegacyBidirectionalIterator und ConstexprIterator(seit C++26) zu const value_type[edit]
reverse_iterator std::reverse_iterator<iterator>[edit]
const_reverse_iterator std::reverse_iterator<const_iterator>[edit]
node_type (seit C++17) eine Spezialisierung von node handle, die einen Containerknoten repräsentiert[edit]
insert_return_type (seit C++17) Typ, der das Ergebnis des Einfügens eines node_type beschreibt, eine Spezialisierung von

template<class Iter, class NodeType>
struct /*unspecified*/
{
    Iter     position;
    bool     inserted;
    NodeType node;
};

instanziiert mit den Template-Argumenten iterator und node_type.[edit]

[edit] Memberfunktionen

konstruiert das set
(public member function) [edit]
zerstört das set
(public member function) [edit]
weist dem Container Werte zu
(public member function) [edit]
gibt den zugehörigen Allocator zurück
(public member function) [edit]
Iteratoren
gibt einen Iterator zum Anfang zurück
(public member function) [edit]
(C++11)
gibt einen Iterator zum Ende zurück
(public member function) [edit]
gibt einen Reverse-Iterator zum Anfang zurück
(public member function) [edit]
(C++11)
gibt einen Reverse-Iterator zum Ende zurück
(public member function) [edit]
Kapazität
prüft, ob der Container leer ist
(public member function) [edit]
Gibt die Anzahl der Elemente zurück
(public member function) [edit]
Gibt die maximal mögliche Anzahl von Elementen zurück
(public member function) [edit]
Modifizierer
leert den Inhalt
(public member function) [edit]
fügt Elemente ein oder Knoten(seit C++17)
(public member function) [edit]
fügt einen Bereich von Elementen ein
(public member function) [edit]
(C++11)
konstruiert Elemente direkt (in-place)
(public member function) [edit]
konstruiert Elemente "in place" unter Verwendung eines Hinweises
(public member function) [edit]
entfernt Elemente
(public member function) [edit]
tauscht die Inhalte
(public member function) [edit]
(C++17)
extrahiert Knoten aus dem Container
(public member function) [edit]
(C++17)
fügt Knoten aus einem anderen Container zusammen
(public member function) [edit]
Suche
gibt die Anzahl der Elemente zurück, die einem bestimmten Schlüssel entsprechen
(public member function) [edit]
sucht ein Element mit einem bestimmten Schlüssel
(public member function) [edit]
(C++20)
prüft, ob der Container ein Element mit einem bestimmten Schlüssel enthält
(public member function) [edit]
gibt den Bereich von Elementen zurück, die einem bestimmten Schlüssel entsprechen
(public member function) [edit]
gibt einen Iterator zum ersten Element zurück, das *nicht kleiner* als der gegebene Schlüssel ist
(public member function) [edit]
gibt einen Iterator zum ersten Element zurück, das *größer* als der gegebene Schlüssel ist
(public member function) [edit]
Observer
gibt die Funktion zurück, die Schlüssel vergleicht
(public member function) [edit]
gibt die Funktion zurück, die Schlüssel in Objekten vom Typ value_type vergleicht
(public member function) [edit]

[edit] Nicht-Member-Funktionen

(entfernt in C++20)(entfernt in C++20)(entfernt in C++20)(entfernt in C++20)(entfernt in C++20)(C++20)
vergleicht die Werte von zwei sets lexikografisch
(function template) [edit]
spezialisiert den Algorithmus std::swap
(function template) [edit]
entfernt alle Elemente, die bestimmte Kriterien erfüllen
(function template) [edit]

Deduction Guides

(seit C++17)

[edit] Hinweise

Die Member-Typen iterator und const_iterator können Aliase für denselben Typ sein. Das bedeutet, dass die Definition eines Paares von Funktionsüberladungen, die die beiden Typen als Parametertypen verwenden, die Ein-Definitionen-Regel (ODR) verletzen kann. Da iterator in const_iterator konvertierbar ist, funktioniert stattdessen eine einzelne Funktion mit einem const_iterator als Parametertyp.

Feature-Test-Makro Wert Std Feature
__cpp_lib_containers_ranges 202202L (C++23) Bereichskonstruktion und -einfügung für Container
__cpp_lib_constexpr_containers 202502L (C++26) constexpr std::set

[edit] Beispiel

#include <algorithm>
#include <iomanip>
#include <iostream>
#include <iterator>
#include <set>
#include <string_view>
 
template<typename T>
std::ostream& operator<<(std::ostream& out, const std::set<T>& set)
{
    if (set.empty())
        return out << "{}";
    out << "{ " << *set.begin();
    std::for_each(std::next(set.begin()), set.end(), [&out](const T& element)
    {
        out << ", " << element;
    });
    return out << " }";
}
 
int main()
{
    std::set<int> set{1, 5, 3};
    std::cout << set << '\n';
 
    set.insert(2);
    std::cout << set << '\n';
 
    set.erase(1);
    std::cout << set << "\n\n";
 
    std::set<int> keys{3, 4};
    for (int key : keys)
    {
        if (set.contains(key))
            std::cout << set << " does contain " << key << '\n';
        else
            std::cout << set << " doesn't contain " << key << '\n';
    }
    std::cout << '\n';
 
    std::string_view word = "element";
    std::set<char> characters(word.begin(), word.end());
    std::cout << "There are " << characters.size() << " unique characters in "
              << std::quoted(word) << ":\n" << characters << '\n';
}

Ausgabe

{ 1, 3, 5 }
{ 1, 2, 3, 5 }
{ 2, 3, 5 }
 
{ 2, 3, 5 } does contain 3
{ 2, 3, 5 } doesn't contain 4
 
There are 5 unique characters in "element":
{ e, l, m, n, t }

[edit] Fehlerberichte

Die folgenden Verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.

DR angewendet auf Verhalten wie veröffentlicht Korrigiertes Verhalten
LWG 103 C++98 iterator erlaubt Modifikation von Schlüsseln iterator wurde konstant gemacht
LWG 230 C++98 Key musste nicht CopyConstructible sein
(ein Schlüssel vom Typ Key konnte möglicherweise nicht konstruiert werden)
Key musste außerdem
CopyConstructible sein

[edit] Siehe auch

Sammlung von Schlüsseln, sortiert nach Schlüsseln
(Klassenvorlage) [edit]
Sammlung eindeutiger Schlüssel, gehasht nach Schlüsseln
(Klassenvorlage) [edit]
(C++23)
passt einen Container an, um eine Sammlung eindeutiger Schlüssel, sortiert nach Schlüsseln, bereitzustellen
(Klassenvorlage) [edit]