Namespaces
Variants

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

From cppreference.net

(1)
unordered_set ( )
: unordered_set ( size_type ( /* no especificado */ ) ) { }
(desde C++11)
(hasta C++20)
unordered_set ( ) ;
(desde C++20)
explicit unordered_set ( size_type bucket_count,

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

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

const Allocator & alloc )

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

const Hash & hash,
const Allocator & alloc )

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

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

const Allocator & alloc = Allocator ( ) ) ;
(6) (desde 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) (desde 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) (desde C++14)
unordered_set ( const unordered_set & other ) ;
(9) (desde C++11)
unordered_set ( const unordered_set & other, const Allocator & alloc ) ;
(10) (desde C++11)
unordered_set ( unordered_set && other ) ;
(11) (desde C++11)
unordered_set ( unordered_set && other, const Allocator & alloc ) ;
(12) (desde C++11)
unordered_set ( std:: initializer_list < value_type > init,

size_type bucket_count = /* no especificado */ ,
const Hash & hash = Hash ( ) ,
const key_equal & equal = key_equal ( ) ,

const Allocator & alloc = Allocator ( ) ) ;
(13) (desde 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) (desde 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) (desde C++14)
template < container-compatible-range < value_type > R >

unordered_set ( std:: from_range_t , R && rg,
size_type bucket_count = /* ver descripción */ ,
const Hash & hash = Hash ( ) ,
const key_equal & equal = key_equal ( ) ,

const Allocator & alloc = Allocator ( ) ) ;
(16) (desde 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) (desde 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) (desde C++23)

Construye un nuevo contenedor a partir de diversas fuentes de datos. Opcionalmente utiliza el bucket_count proporcionado por el usuario como número mínimo de buckets a crear, hash como función de hash, equal como función para comparar claves y alloc como asignador.

1-5) Construye un contenedor vacío. Establece max_load_factor() a 1.0 . Para el constructor por defecto, el número de buckets no está especificado.
6-8) Construye el contenedor con los contenidos del rango [ first , last ) . Establece max_load_factor() a 1.0 . Si múltiples elementos en el rango tienen claves que son equivalentes, no está especificado qué elemento se inserta (pendiente de LWG2844 ).
9,10) Constructor de copia. Construye el contenedor con la copia de los contenidos de other , copia el factor de carga, el predicado y la función hash también. Si alloc no se proporciona, el asignador se obtiene llamando a std:: allocator_traits < allocator_type > :: select_on_container_copy_construction ( other. get_allocator ( ) ) .

El parámetro de plantilla Allocator solo se deduce del primer argumento cuando se utiliza en deducción de argumentos de plantilla de clase .

(desde C++23)
11,12) Constructor de movimiento . Construye el contenedor con los contenidos de other usando semántica de movimiento. Si alloc no es proporcionado, el asignador se obtiene mediante construcción por movimiento del asignador perteneciente a other .

El parámetro de plantilla Allocator solo se deduce del primer argumento cuando se usa en deducción de argumentos de plantilla de clase .

(desde C++23)
13-15) Constructor de lista de inicialización . Construye el contenedor con el contenido de la lista de inicialización init , igual que unordered_set ( init. begin ( ) , init. end ( ) ) .
16-18) Construye el contenedor con los contenidos de rg . Si múltiples elementos en el rango tienen claves que comparan equivalentes, no está especificado qué elemento se inserta (pendiente de LWG2844 ).

Contenidos

Parámetros

alloc - asignador a utilizar para todas las asignaciones de memoria de este contenedor
bucket_count - número mínimo de cubos a utilizar en la inicialización. Si no se especifica, se utiliza un valor predeterminado no especificado
hash - función hash a utilizar
equal - función de comparación a utilizar para todas las comparaciones de claves de este contenedor
first, last - el par de iteradores que define el rango fuente de elementos a copiar
rg - un rango compatible con contenedor , es decir, un input_range cuyos elementos son convertibles a value_type
other - otro contenedor que se utilizará como fuente para inicializar los elementos del contenedor
init - lista de inicialización para inicializar los elementos del contenedor
Requisitos de tipo
-
InputIt debe cumplir con los requisitos de LegacyInputIterator .

Complejidad

1-5) Constante.
6-8) Caso promedio lineal (es decir, O(N) , donde N es std:: distance ( first, last ) ), caso peor cuadrático, es decir, O(N 2 ) .
9,10) Lineal en el tamaño de other .
11,12) Constante. Si alloc es proporcionado y alloc ! = other. get_allocator ( ) , entonces lineal.
13-15) Caso promedio O(N) ( N es std:: size ( init ) ), caso peor O(N 2 ) .
16-18) Caso promedio O(N) ( N es ranges:: distance ( rg ) ), caso peor O(N 2 ) .

Excepciones

Las llamadas a Allocator::allocate pueden lanzar excepciones.

Notas

After container move construction (overload ( 11,12 ) ), references, pointers, and iterators (other than the end iterator) to otro 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 Problema LWG 2321 .

Aunque no es formalmente requerido hasta C++23, algunas implementaciones ya han colocado el parámetro de plantilla Allocator en contextos no deducidos en modos anteriores.

Macro de prueba de características Valor Estándar Característica
__cpp_lib_containers_ranges 202202L (C++23) Construcción e inserción consciente de rangos; sobrecargas ( 16-18 )

Ejemplo

Informes de defectos

Los siguientes informes de defectos que modifican el comportamiento se aplicaron retroactivamente a los estándares de C++ publicados anteriormente.

DR Aplicado a Comportamiento publicado Comportamiento correcto
LWG 2193 C++11 el constructor por defecto ( 1 ) era explícito hecho no explícito
LWG 2230 C++11 la semántica de la sobrecarga ( 13 ) no estaba especificada especificada

Véase también

asigna valores al contenedor
(función miembro pública)