std:: flat_set
|
Definiert im Header
<flat_set>
|
||
|
template
<
class
Key,
|
(seit C++23) | |
Das flache Set ist ein
Container-Adaptor
, der die Funktionalität eines assoziativen Containers bereitstellt, der eine sortierte Menge eindeutiger Objekte vom Typ
Key
speichert. Die Sortierung erfolgt mithilfe der Schlüsselvergleichsfunktion
Compare
.
Die Klassenvorlage
flat_set
fungiert als Wrapper für den zugrunde liegenden sortierten Container, der als Objekt vom Typ
KeyContainer
übergeben wird.
Überall dort, wo die Standardbibliothek die Compare -Anforderungen verwendet, wird Eindeutigkeit durch die Verwendung der Äquivalenzrelation bestimmt. Informell gesagt werden zwei Objekte a und b als äquivalent betrachtet, wenn keines kleiner als das andere verglichen wird: ! comp ( a, b ) && ! comp ( b, a ) .
std::flat_set
erfüllt die Anforderungen von
Container
,
ReversibleContainer
,
optionalen Container-Anforderungen
und alle Anforderungen von
AssociativeContainer
(einschließlich logarithmischer Suchkomplexität), außer dass:
- Anforderungen bezüglich Knoten sind nicht anwendbar,
- Iterator-Invalidierungsanforderungen unterscheiden sich,
- die Komplexität von Einfüge- und Löschoperationen ist linear.
Ein flacher Satz unterstützt die meisten AssociativeContainer -Operationen, die eindeutige Schlüssel verwenden.
Alle Memberfunktionen von
std::flat_set
sind
constexpr
: Es ist möglich,
std::flat_set
-Objekte in der Auswertung eines konstanten Ausdrucks zu erstellen und zu verwenden.
Allerdings können
|
(since C++26) |
Inhaltsverzeichnis |
Iterator-Invalidierung
| Dieser Abschnitt ist unvollständig |
Template-Parameter
| Key | - |
Der Typ der gespeicherten Elemente. Das Programm ist fehlerhaft, wenn
Key
nicht derselbe Typ wie
KeyContainer::value_type
ist.
|
| Compare | - | Ein Compare -Typ, der eine strenge schwache Ordnung bereitstellt. |
| KeyContainer | - |
Der Typ des zugrundeliegenden
SequenceContainer
zur Speicherung der Elemente. Die Iteratoren eines solchen Containers sollten
LegacyRandomAccessIterator
erfüllen oder
random_access_iterator
modellieren.
Die Standardcontainer std::vector und std::deque erfüllen diese Anforderungen. |
Mitgliedertypen
| Typ | Definition |
container_type
|
Key
Container
|
key_type
|
Key
|
value_type
|
Key
|
key_compare
|
Compare
|
value_compare
|
Compare
|
reference
|
value_type & |
const_reference
|
const value_type & |
size_type
|
typename KeyContainer :: size_type |
difference_type
|
typename KeyContainer :: difference_type |
iterator
|
implementierungsdefiniert
LegacyRandomAccessIterator
,
ConstexprIterator
(seit C++26)
und
random_access_iterator
zu
value_type
|
const_iterator
|
implementierungsdefiniert
LegacyRandomAccessIterator
,
ConstexprIterator
(seit C++26)
und
random_access_iterator
zu
const
value_type
|
reverse_iterator
|
std:: reverse_iterator < iterator > |
const_reverse_iterator
|
std:: reverse_iterator < const_iterator > |
Member-Objekte
| Member | Beschreibung |
container_type
c
(private)
|
der adaptierte Container
( exposition-only member object* ) |
key_compare
compare
(private)
|
das Vergleichsfunktionsobjekt
( exposition-only member object* ) |
Memberfunktionen
konstruiert den
flat_set
(öffentliche Elementfunktion) |
|
|
(destructor)
(implicitly declared)
|
zerstört jedes Element des Container-Adapters
(public member function) |
|
weist dem Container-Adapter Werte zu
(öffentliche Elementfunktion) |
|
Iteratoren |
|
|
gibt einen Iterator zum Anfang zurück
(öffentliche Elementfunktion) |
|
|
gibt einen Iterator zum Ende zurück
(öffentliche Elementfunktion) |
|
|
gibt einen umgekehrten Iterator zum Anfang zurück
(öffentliche Elementfunktion) |
|
|
gibt einen umgekehrten Iterator zum Ende zurück
(öffentliche Elementfunktion) |
|
Kapazität |
|
|
prüft, ob der Container-Adapter leer ist
(öffentliche Elementfunktion) |
|
|
gibt die Anzahl der Elemente zurück
(öffentliche Elementfunktion) |
|
|
gibt die maximal mögliche Anzahl von Elementen zurück
(öffentliche Elementfunktion) |
|
Modifikatoren |
|
|
Konstruiert Element direkt vor Ort
(öffentliche Elementfunktion) |
|
|
Konstruiert Elemente direkt unter Verwendung eines Hinweises
(öffentliche Elementfunktion) |
|
|
fügt Elemente ein
(öffentliche Elementfunktion) |
|
|
fügt eine Reihe von Elementen ein
(öffentliche Elementfunktion) |
|
|
extrahiert den zugrunde liegenden Container
(öffentliche Elementfunktion) |
|
|
ersetzt den zugrunde liegenden Container
(öffentliche Elementfunktion) |
|
|
löscht Elemente
(öffentliche Elementfunktion) |
|
|
tauscht die Inhalte aus
(öffentliche Elementfunktion) |
|
|
löscht den Inhalt
(öffentliche Elementfunktion) |
|
Lookup |
|
|
findet Element mit spezifischem Schlüssel
(öffentliche Elementfunktion) |
|
|
gibt die Anzahl der Elemente zurück, die einem bestimmten Schlüssel entsprechen
(öffentliche Elementfunktion) |
|
|
prüft, ob der Container ein Element mit einem bestimmten Schlüssel enthält
(öffentliche Elementfunktion) |
|
|
gibt einen Iterator zum ersten Element zurück,
das nicht kleiner
als der gegebene Schlüssel ist
(öffentliche Elementfunktion) |
|
|
gibt einen Iterator zum ersten Element zurück,
größer
als der angegebene Schlüssel
(öffentliche Elementfunktion) |
|
|
gibt den Bereich der Elemente zurück, die einem bestimmten Schlüssel entsprechen
(öffentliche Elementfunktion) |
|
Beobachter |
|
|
gibt die Funktion zurück, die Schlüssel vergleicht
(public member function) |
|
gibt die Funktion zurück, die Schlüssel in Objekten vom Typ
value_type
vergleicht
(öffentliche Elementfunktion) |
|
Nicht-Member-Funktionen
|
(C++23)
|
vergleicht lexikographisch die Werte zweier
flat_set
s
(Funktions-Template) |
|
(C++23)
|
spezialisiert den
std::swap
Algorithmus
(Funktions-Template) |
|
(C++23)
|
löscht alle Elemente, die bestimmte Kriterien erfüllen
(Funktions-Template) |
Hilfsklassen
|
spezialisiert das
std::uses_allocator
Typ-Trait
(Klassen-Template-Spezialisierung) |
Tags
|
(C++23)
|
zeigt an, dass Elemente eines Bereichs sortiert und eindeutig sind
(Tag) |
Ableitungsleitfäden
Hinweise
Die Member-Typen
iterator
und
const_iterator
können Aliase für denselben Typ sein. Dies bedeutet, dass das Definieren eines Paares von Funktionsüberladungen, die die beiden Typen als Parametertypen verwenden, die
One Definition Rule
verletzen kann. Da
iterator
in
const_iterator
konvertierbar ist, wird stattdessen eine einzelne Funktion mit einem
const_iterator
als Parametertyp funktionieren.
Einige Vorteile von Flat Set gegenüber anderen standardmäßigen Container-Adaptoren sind:
- Möglicherweise schnellere Suche (obwohl Suchoperationen logarithmische Komplexität haben).
- Deutlich schnellere Iteration: random access iterators statt bidirectional iterators .
- Geringerer Speicherverbrauch für kleine Objekte (und für große Objekte falls KeyContainer :: shrink_to_fit ( ) verfügbar ist).
-
Bessere Cache-Performance (abhängig von
KeyContainer, Schlüssel werden in zusammenhängenden Speicherblöcken gespeichert).
Einige Nachteile von flat set sind:
- Nicht-stabile Iteratoren (Iteratoren werden beim Einfügen und Löschen von Elementen ungültig).
- Nicht kopierbare und nicht verschiebbare Typwerte können nicht gespeichert werden.
- Schwächere Ausnahmesicherheit (Kopier-/Verschiebekonstruktoren können beim Verschieben von Werten bei Löschungen und Einfügungen Ausnahmen werfen).
- Langsamere (d.h. lineare) Einfügung und Löschung, insbesondere für nicht verschiebbare Typen.
| Feature-Test Makro | Wert | Std | Feature |
|---|---|---|---|
__cpp_lib_flat_set
|
202207L
|
(C++23) |
std::flat_set
und
std::flat_multiset
|
__cpp_lib_constexpr_flat_set
|
202502L
|
(C++26) |
constexpr
std::flat_set
|
Beispiel
|
Dieser Abschnitt ist unvollständig
Grund: Kein Beispiel |
Siehe auch
|
(C++23)
|
Passt einen Container an, um eine Sammlung von Schlüsseln zu bieten, sortiert nach Schlüsseln
(Klassentemplate) |
|
Sammlung eindeutiger Schlüssel, sortiert nach Schlüsseln
(Klassentemplate) |
|
|
(C++11)
|
Sammlung eindeutiger Schlüssel, gehasht nach Schlüsseln
(Klassentemplate) |