Namespaces
Variants

std::unordered_set<Key,Hash,KeyEqual,Allocator>:: unordered_set

From cppreference.net

**Übersetzungsdetails:** - "see description" wurde zu "siehe Beschreibung" übersetzt - "since C++23" wurde zu "seit C++23" übersetzt - Alle HTML-Tags, Attribute und C++-spezifische Begriffe wurden beibehalten - Code-Blöcke innerhalb der ` ` wurden nicht übersetzt - Die Formatierung und Struktur des HTML-Codes wurde vollständig erhalten (Anmerkung: Der bereitgestellte HTML-Code enthält keinen übersetzbaren Text, da alle Tags leer sind. Die Struktur bleibt unverändert, wie angefordert.)
(1)
unordered_set ( )
: unordered_set ( size_type ( /* unspecified */ ) ) { }
(seit C++11)
(bis C++20)
unordered_set ( ) ;
(seit C++20)
explicit unordered_set ( size_type bucket_count,

const Hash & hash = Hash ( ) ,
const key_equal & equal = key_equal ( ) ,

const Allocator & alloc = Allocator ( ) ) ;
(2) (seit C++11)
unordered_set ( size_type bucket_count,

const Allocator & alloc )

: unordered_set ( bucket_count, Hash ( ) , key_equal ( ) , alloc ) { }
(3) (seit C++14)
unordered_set ( size_type bucket_count,

const Hash & hash,
const Allocator & alloc )

: unordered_set ( bucket_count, hash, key_equal ( ) , alloc ) { }
(4) (seit C++14)
explicit unordered_set ( const Allocator & alloc ) ;
(5) (seit C++11)
template < class InputIt >

unordered_set ( InputIt first, InputIt last,
size_type bucket_count = /* nicht spezifiziert */ ,
const Hash & hash = Hash ( ) ,
const key_equal & equal = key_equal ( ) ,

const Allocator & alloc = Allocator ( ) ) ;
(6) (seit C++11)
template < class InputIt >

unordered_set ( InputIt first, InputIt last,
size_type bucket_count,
const Allocator & alloc )
: unordered_set ( first, last,

bucket_count, Hash ( ) , key_equal ( ) , alloc ) { }
(7) (seit C++14)
template < class InputIt >

unordered_set ( InputIt first, InputIt last,
size_type bucket_count,
const Hash & hash,
const Allocator & alloc )
: unordered_set ( first, last,

bucket_count, hash, key_equal ( ) , alloc ) { }
(8) (seit C++14)
unordered_set ( const unordered_set & other ) ;
(9) (seit C++11)
unordered_set ( const unordered_set & other, const Allocator & alloc ) ;
(10) (seit C++11)
unordered_set ( unordered_set && other ) ;
(11) (seit C++11)
unordered_set ( unordered_set && other, const Allocator & alloc ) ;
(12) (seit C++11)
unordered_set ( std:: initializer_list < value_type > init,

size_type bucket_count = /* nicht spezifiziert */ ,
const Hash & hash = Hash ( ) ,
const key_equal & equal = key_equal ( ) ,

const Allocator & alloc = Allocator ( ) ) ;
(13) (seit C++11)
unordered_set ( std:: initializer_list < value_type > init,

size_type bucket_count,
const Allocator & alloc )
: unordered_set ( init, bucket_count,

Hash ( ) , key_equal ( ) , alloc ) { }
(14) (seit C++14)
unordered_set ( std:: initializer_list < value_type > init,

size_type bucket_count,
const Hash & hash,
const Allocator & alloc )
: unordered_set ( init, bucket_count,

hash, key_equal ( ) , alloc ) { }
(15) (seit C++14)
template < container-compatible-range < value_type > R >

unordered_set ( std:: from_range_t , R && rg,
size_type bucket_count = /* siehe Beschreibung */ ,
const Hash & hash = Hash ( ) ,
const key_equal & equal = key_equal ( ) ,

const Allocator & alloc = Allocator ( ) ) ;
(16) (seit C++23)
template < container-compatible-range < value_type > R >

unordered_set ( std:: from_range_t , R && rg,
size_type bucket_count,
const Allocator & alloc )
: unordered_set ( std:: from_range , std:: forward < R > ( rg ) ,

bucket_count, Hash ( ) , key_equal ( ) , alloc ) { }
(17) (seit C++23)
template < container-compatible-range < value_type > R >

unordered_set ( std:: from_range_t , R && rg,
size_type bucket_count,
const Hash & hash,
const Alloc & alloc )
: unordered_set ( std:: from_range , std:: forward < R > ( rg ) ,

bucket_count, hash, key_equal ( ) , alloc ) { }
(18) (seit C++23)

Konstruiert einen neuen Container aus verschiedenen Datenquellen. Verwendet optional die vom Benutzer bereitgestellte bucket_count als minimale Anzahl zu erstellender Buckets, hash als Hash-Funktion, equal als Funktion zum Vergleichen von Schlüsseln und alloc als Allokator.

1-5) Konstruiert einen leeren Container. Setzt max_load_factor() auf 1.0 . Für den Standardkonstruktor ist die Anzahl der Buckets nicht spezifiziert.
6-8) Konstruiert den Container mit den Inhalten des Bereichs [ first , last ) . Setzt max_load_factor() auf 1.0 . Falls mehrere Elemente im Bereich Schlüssel haben, die äquivalent verglichen werden, ist nicht spezifiziert, welches Element eingefügt wird (ausstehend LWG2844 ).
9,10) Kopierkonstruktor. Konstruiert den Container mit der Kopie der Inhalte von other , kopiert ebenfalls den Ladefaktor, das Prädikat und die Hash-Funktion. Falls alloc nicht bereitgestellt wird, wird der Allokator durch Aufruf von std:: allocator_traits < allocator_type > :: select_on_container_copy_construction ( other. get_allocator ( ) ) erhalten.

Der Template-Parameter Allocator wird nur vom ersten Argument abgeleitet, wenn Klassentemplate-Argumentableitung verwendet wird.

(seit C++23)
11,12) Move-Konstruktor . Konstruiert den Container mit den Inhalten von other unter Verwendung von Move-Semantik. Wenn alloc nicht bereitgestellt wird, wird der Allokator durch Move-Konstruktion vom zu other gehörenden Allokator erhalten.

Der Template-Parameter Allocator wird nur vom ersten Argument abgeleitet, wenn Class Template Argument Deduction verwendet wird.

(seit C++23)
13-15) Initializer-list-Konstruktor . Konstruiert den Container mit den Inhalten der Initialisierungsliste init , identisch mit unordered_set ( init. begin ( ) , init. end ( ) ) .
16-18) Konstruiert den Container mit den Inhalten von rg . Falls mehrere Elemente im Bereich Schlüssel haben, die äquivalent verglichen werden, ist nicht spezifiziert, welches Element eingefügt wird (ausstehend LWG2844 ).

Inhaltsverzeichnis

Parameter

alloc - Allokator, der für alle Speicherallokationen dieses Containers verwendet wird
bucket_count - Minimale Anzahl von Buckets, die bei der Initialisierung verwendet werden. Wenn nicht angegeben, wird ein nicht spezifizierter Standardwert verwendet
hash - Zu verwendende Hash-Funktion
equal - Vergleichsfunktion, die für alle Schlüsselvergleiche dieses Containers verwendet wird
first, last - Das Iteratorpaar, das die Quelle range der zu kopierenden Elemente definiert
rg - Ein container compatible range , also ein input_range , dessen Elemente in value_type konvertierbar sind
other - Ein weiterer Container, der als Quelle zur Initialisierung der Elemente des Containers verwendet wird
init - Initialisierungsliste zur Initialisierung der Elemente des Containers
Typanforderungen
-
InputIt muss die Anforderungen von LegacyInputIterator erfüllen.

Komplexität

1-5) Konstante.
6-8) Durchschnittliche Laufzeit linear (d.h. O(N) , wobei N gleich std:: distance ( first, last ) ist), im schlimmsten Fall quadratisch, d.h. O(N 2 ) .
9,10) Linear in der Größe von other .
11,12) Konstant. Wenn alloc angegeben ist und alloc ! = other. get_allocator ( ) , dann linear.
13-15) Durchschnittlicher Fall O(N) ( N ist std:: size ( init ) ), schlechtester Fall O(N 2 ) .
16-18) Durchschnittlicher Fall O(N) ( N ist ranges:: distance ( rg ) ), schlechtester Fall O(N 2 ) .

Ausnahmen

Aufrufe von Allocator::allocate können eine Ausnahme auslösen.

Hinweise

After container move construction (overload ( 11,12 ) ), references, pointers, and iterators (other than the end iterator) to other remain valid, but refer to elements that are now in * this . The current standard makes this guarantee via the blanket statement in [container.reqmts]/67 , and a more direct guarantee is under consideration via LWG-Problem 2321 .

Obwohl es erst ab C++23 formal erforderlich ist, haben einige Implementierungen den Template-Parameter Allocator bereits in früheren Modi in nicht abgeleitete Kontexte platziert.

Feature-Test Makro Wert Std Feature
__cpp_lib_containers_ranges 202202L (C++23) Ranges-bewusste Konstruktion und Einfügung; Überladungen ( 16-18 )

Beispiel

Fehlerberichte

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

DR Angewendet auf Verhalten wie veröffentlicht Korrektes Verhalten
LWG 2193 C++11 der Standardkonstruktor ( 1 ) war explicit als non-explicit festgelegt
LWG 2230 C++11 die Semantik von Überladung ( 13 ) war nicht spezifiziert spezifiziert

Siehe auch

weist dem Container Werte zu
(öffentliche Elementfunktion)