std::multiset<Key,Compare,Allocator>::multiset
multiset(); explicit multiset( const Compare& comp, {{#pad:|17}} const Allocator& alloc = Allocator() ); |
(1) | |
explicit multiset( const Allocator& alloc ); |
(1) | (desde C++11) |
| (2) | ||
template< class InputIt > multiset( InputIt first, InputIt last, {{#pad:|8}} const Compare& comp = Compare(), {{#pad:|8}} const Allocator& alloc = Allocator() ); |
||
template< class InputIt > multiset( InputIt first, InputIt last, {{#pad:|8}} const Allocator& alloc ); |
(desde C++14) | |
multiset( const multiset& other ); |
(3) | |
multiset( const multiset& other, const Allocator& alloc ); |
(3) | (desde C++11) |
multiset( multiset&& other ); |
(4) | (desde C++11) |
multiset( multiset&& other, const Allocator& alloc ); |
(4) | (desde C++11) |
| (5) | ||
multiset( std::initializer_list<value_type> init, {{#pad:|8}} const Compare& comp = Compare(), {{#pad:|8}} const Allocator& alloc = Allocator() ); |
(desde C++11) | |
multiset( std::initializer_list<value_type> init, {{#pad:|8}} const Allocator& ); |
(desde C++14) | |
Construye un nuevo contenedor a partir de una variedad de fuentes de datos y, opcionalmente, utiliza el asignador de memoria alloc proporcionado por el usuario o el objeto función de comparación comp.
[first, last). other.
|
Si |
(desde C++11) |
|
El parámetro de plantilla |
(desde C++23) |
other utilizando la semántica de movimiento. Si alloc no se proporciona, el asignador se obtiene mediante la construcción por movimiento a partir del asignador que pertenece a other.
|
El parámetro de plantilla |
(desde C++23) |
init. Parámetros
| alloc | - | El asignador a usar para todas las asignaciones de memoria de este contenedor. |
| comp | - | El objeto función de comparación a usar para todas las comparaciones de claves. |
| first, last | - | El rango del cual copiar los elementos. |
| other | - | Otro contenedor a usar como fuente con el cual inicializar los elementos del contenedor. |
| init | - | La lista de inicializadores con la cual inicializar los elementos del contenedor. |
| Requisitos de tipo | ||
-InputIt debe satisfacer los requisitos de InputIterator.
| ||
-Compare debe satisfacer los requisitos de Compare.
| ||
-Allocator debe satisfacer los requisitos de Allocator.
| ||
Complejidad
N = std::distance(first, last) por lo general, lineal en N si el rango ya está ordenado por value_comp().other.alloc y alloc != other.get_allocator(), entonces lineal.N = init.size() por lo general, lineal en N si init ya está ordenada por value_comp().Excepciones
Las llamadas a Allocator::allocate pueden lanzar.
Notas
Después de la construcción por movimiento de un contenedor (la sobrecarga (4)), las referencias, punteros e iteradores (aparte del iterador al final) a other permanecen válidos, pero se refieren a los elementos que ahora se encuentran en *this. El estándar actual da esta garantía vía la generalización en [container.requirements.general]/12, y una garantía más directa está bajo consideración vía LWG 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 modalidades anteriores.
Ejemplo
#include <iostream>
#include <string_view>
#include <set>
void imprimir(const std::string_view nombre, const std::multiset<int>& ms)
{
std::cout << nombre << ": ";
for(auto elemento: ms)
std::cout << elemento << " ";
std::cout << '\n';
}
int main()
{
// (1) Constructor por defecto
std::multiset<int> a;
a.insert(4);
a.insert(3);
a.insert(2);
a.insert(1);
imprimir("a", a);
// (2) Constructor por rango
std::multiset<int> b(a.begin(), a.find(3));
imprimir("b", b);
// (3) Constructor de copia
std::multiset<int> c(a);
imprimir("c", c);
// (4) Constructor de movimiento
std::multiset<int> d(std::move(a));
imprimir("d", d);
// (5) Constructor por lista de inicializadores
std::multiset<int> e {3,2,1,2,4,7,3};
imprimir("e", e);
}
Salida:
a: 1 2 3 4
b: 1 2
c: 1 2 3 4
d: 1 2 3 4
e: 1 2 2 3 3 4 7
Informes de defectos
Los siguientes informes de defectos de cambio de comportamiento se aplicaron de manera retroactiva a los estándares de C++ publicados anteriormente.
| ID | Aplicado a | Comportamiento según lo publicado | Comportamiento correcto |
|---|---|---|---|
| LWG 2193 | C++11 | El constructor por defecto es explicit.
|
Se hizo no explicit.
|
Véase también
| Asigna valores al contenedor. (función miembro pública) |