std::multimap<Key,T,Compare,Allocator>::multimap
multimap(); explicit multimap( const Compare& comp, {{#pad:|17}} const Allocator& alloc = Allocator() ); |
(1) | |
explicit multimap( const Allocator& alloc ); |
(1) | (desde C++11) |
| (2) | ||
template< class InputIt > multimap( InputIt first, InputIt last, {{#pad:|8}} const Compare& comp = Compare(), {{#pad:|8}} const Allocator& alloc = Allocator() ); |
||
template< class InputIt > multimap( InputIt first, InputIt last, {{#pad:|8}} const Allocator& alloc ); |
(desde C++14) | |
multimap( const multimap& other ); |
(3) | |
multimap( const multimap& other, const Allocator& alloc ); |
(3) | (desde C++11) |
multimap( multimap&& other ); |
(4) | (desde C++11) |
multimap( multimap&& other, const Allocator& alloc ); |
(4) | (desde C++11) |
| (5) | ||
multimap( std::initializer_list<value_type> init, {{#pad:|8}} const Compare& comp = Compare(), {{#pad:|8}} const Allocator& alloc = Allocator() ); |
(desde C++11) | |
multimap( 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 <map>
struct Punto { double x, y; };
struct CompDePuntos { // comparador de tipos Punto
bool operator()(const Punto& lhs, const Punto& rhs) const {
return lhs.x < rhs.x; // NB. ignora y a propósito
}
};
int main() {
std::multimap<int, int> m = {{1,1},{2,2},{3,3},{4,4},{5,5},{4,4},{3,3},{2,2},{1,1}};
for(auto& p: m) std::cout << p.first << ' ' << p.second << '\n';
// comparación personalizada
std::multimap<Punto, double, CompDePuntos> mag{
{ {5, 12}, 13 },
{ {3, 4}, 5 },
{ {8, 15}, 17 },
{ {3, -3}, -1 },
};
for(auto p : mag)
std::cout << "La magnitud de (" << p.first.x
<< ", " << p.first.y << ") es "
<< p.second << '\n';
}
Salida:
1 1
1 1
2 2
2 2
3 3
3 3
4 4
4 4
5 5
La magnitud de (3, 4) es 5
La magnitud de (3, -3) es -1
La magnitud de (5, 12) es 13
La magnitud de (8, 15) es 17
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) |