Namespaces
Variants

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

From es.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 ).

Contenido

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

Después de la construcción por movimiento del contenedor (sobrecarga (4)), las referencias, punteros e iteradores que originalmente se referían a elementos en other siguen siendo válidos, pero se refieren a elementos que ahora están en *this. El estándar actual garantiza esto mediante la declaración general en [container.reqmts]/67, y se está considerando una garantía más directa a través de LWG issue 2321.

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

Prueba de característica macro Valor Estándar Característica
__cpp_lib_containers_ranges 202202L (C++23) Construcción e inserción conscientes 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)