std:: map
|
Definido en el encabezado
<map>
|
||
|
template
<
class
Key,
|
(1) | |
|
namespace
pmr
{
template
<
|
(2) | (desde C++17) |
std::map
es un contenedor asociativo ordenado que contiene pares clave-valor con claves únicas. Las claves se ordenan utilizando la función de comparación
Compare
. Las operaciones de búsqueda, eliminación e inserción tienen complejidad logarítmica. Los mapas generalmente se implementan como
Red–black trees
.
Los iteradores de
std::map
iteran en orden ascendente de claves, donde ascendente se define por la comparación que se utilizó para la construcción. Es decir, dado
-
m
, un
std::map - it_l y it_r , iteradores dereferenciables a m , con it_l < it_r .
m. value_comp ( ) ( * it_l, * it_r ) == true (de menor a mayor si se utiliza la comparación por defecto).
En todas partes donde la biblioteca estándar utiliza los Compare requisitos, la unicidad se determina utilizando la relación de equivalencia. En términos imprecisos, dos objetos a y b se consideran equivalentes (no únicos) si ninguno es menor que el otro: ! comp ( a, b ) && ! comp ( b, a ) .
std::map
cumple con los requisitos de
Container
,
AllocatorAwareContainer
,
AssociativeContainer
y
ReversibleContainer
.
Todas las funciones miembro de
std::map
son
constexpr
: es posible crear y utilizar objetos
std::map
en la evaluación de una expresión constante.
Sin embargo, los objetos
|
(since C++26) |
Contenidos |
Parámetros de plantilla
|
Esta sección está incompleta
Razón: Añadir descripciones de los parámetros de plantilla. |
Tipos de miembros
| Tipo | Definición | ||||
key_type
|
Key
|
||||
mapped_type
|
T
|
||||
value_type
|
std:: pair < const Key, T > | ||||
size_type
|
Tipo entero sin signo (normalmente std::size_t ) | ||||
difference_type
|
Tipo entero con signo (normalmente std::ptrdiff_t ) | ||||
key_compare
|
Compare
|
||||
allocator_type
|
Allocator
|
||||
reference
|
value_type & | ||||
const_reference
|
const value_type & | ||||
pointer
|
|
||||
const_pointer
|
|
||||
iterator
|
LegacyBidirectionalIterator
y
ConstexprIterator
(desde C++26)
a
value_type
|
||||
const_iterator
|
LegacyBidirectionalIterator y ConstexprIterator (desde C++26) a const value_type | ||||
reverse_iterator
|
std:: reverse_iterator < iterator > | ||||
const_reverse_iterator
|
std:: reverse_iterator < const_iterator > | ||||
node_type
(desde C++17)
|
una especialización de node handle que representa un nodo del contenedor | ||||
insert_return_type
(desde C++17)
|
tipo que describe el resultado de insertar un
node_type
, una especialización de
template
<
class
Iter,
class
NodeType
>
|
Clases miembro
compara objetos de tipo
value_type
(clase) |
Funciones miembro
construye el
map
(función miembro pública) |
|
destruye el
map
(función miembro pública) |
|
|
asigna valores al contenedor
(función miembro pública) |
|
|
devuelve el asignador asociado
(función miembro pública) |
|
Acceso a elementos |
|
|
accede al elemento especificado con verificación de límites
(función miembro pública) |
|
|
acceder o insertar elemento especificado
(función miembro pública) |
|
Iteradores |
|
|
(C++11)
|
devuelve un iterador al inicio
(función miembro pública) |
|
(C++11)
|
devuelve un iterador al final
(función miembro pública) |
|
(C++11)
|
devuelve un iterador inverso al principio
(función miembro pública) |
|
(C++11)
|
devuelve un iterador inverso al final
(función miembro pública) |
Capacidad |
|
|
verifica si el contenedor está vacío
(función miembro pública) |
|
|
devuelve el número de elementos
(función miembro pública) |
|
|
devuelve el número máximo posible de elementos
(función miembro pública) |
|
Modificadores |
|
|
borra el contenido
(función miembro pública) |
|
|
inserta elementos
o nodos
(desde C++17)
(función miembro pública) |
|
|
(C++23)
|
inserta un rango de elementos
(función miembro pública) |
|
(C++17)
|
inserta un elemento o asigna al elemento actual si la clave ya existe
(función miembro pública) |
|
(C++11)
|
construye el elemento in situ
(función miembro pública) |
|
(C++11)
|
construye elementos in-situ usando una pista
(función miembro pública) |
|
(C++17)
|
inserta in-situ si la clave no existe, no hace nada si la clave existe
(función miembro pública) |
|
elimina elementos
(función miembro pública) |
|
|
intercambia los contenidos
(función miembro pública) |
|
|
(C++17)
|
extrae nodos del contenedor
(función miembro pública) |
|
(C++17)
|
empalma nodos de otro contenedor
(función miembro pública) |
Búsqueda |
|
|
devuelve el número de elementos que coinciden con una clave específica
(función miembro pública) |
|
|
encuentra elemento con clave específica
(función miembro pública) |
|
|
(C++20)
|
verifica si el contenedor contiene un elemento con clave específica
(función miembro pública) |
|
devuelve el rango de elementos que coinciden con una clave específica
(función miembro pública) |
|
|
devuelve un iterador al primer elemento
no menor
que la clave dada
(función miembro pública) |
|
|
devuelve un iterador al primer elemento
mayor
que la clave dada
(función miembro pública) |
|
Observadores |
|
|
devuelve la función que compara claves
(función miembro pública) |
|
devuelve la función que compara claves en objetos de tipo
value_type
(función miembro pública) |
|
Funciones no miembro
|
(eliminado en C++20)
(eliminado en C++20)
(eliminado en C++20)
(eliminado en C++20)
(eliminado en C++20)
(C++20)
|
compara lexicográficamente los valores de dos
map
s
(plantilla de función) |
|
especializa el algoritmo
std::swap
(plantilla de función) |
|
|
(C++20)
|
elimina todos los elementos que cumplen criterios específicos
(plantilla de función) |
Guías de deducción |
(desde C++17) |
Notas
| Macro de prueba de características | Valor | Estándar | Característica |
|---|---|---|---|
__cpp_lib_containers_ranges
|
202202L
|
(C++23) | Construcción e inserción de rangos para contenedores |
__cpp_lib_constexpr_map
|
202502L
|
(C++26) |
constexpr
std::map
|
Ejemplo
#include <iostream> #include <map> #include <string> #include <string_view> void print_map(std::string_view comment, const std::map<std::string, int>& m) { std::cout << comment; // Iterar usando facilidades de C++17 for (const auto& [key, value] : m) std::cout << '[' << key << "] = " << value << "; "; // Alternativa C++11: // for (const auto& n : m) // std::cout << n.first << " = " << n.second << "; "; // // Alternativa C++98: // for (std::map<std::string, int>::const_iterator it = m.begin(); it != m.end(); ++it) // std::cout << it->first << " = " << it->second << "; "; std::cout << '\n'; } int main() { // Crear un mapa de tres pares (string, int) std::map<std::string, int> m{{"CPU", 10}, {"GPU", 15}, {"RAM", 20}}; print_map("1) Mapa inicial: ", m); m["CPU"] = 25; // actualizar un valor existente m["SSD"] = 30; // insertar un nuevo valor print_map("2) Mapa actualizado: ", m); // Usar operator[] con una clave inexistente siempre realiza una inserción std::cout << "3) m[UPS] = " << m["UPS"] << '\n'; print_map("4) Mapa actualizado: ", m); m.erase("GPU"); print_map("5) Después de borrar: ", m); std::erase_if(m, [](const auto& pair){ return pair.second > 25; }); print_map("6) Después de borrar: ", m); std::cout << "7) m.size() = " << m.size() << '\n'; m.clear(); std::cout << std::boolalpha << "8) Mapa vacío: " << m.empty() << '\n'; }
Salida:
1) Mapa inicial: [CPU] = 10; [GPU] = 15; [RAM] = 20; 2) Mapa actualizado: [CPU] = 25; [GPU] = 15; [RAM] = 20; [SSD] = 30; 3) m[UPS] = 0 4) Mapa actualizado: [CPU] = 25; [GPU] = 15; [RAM] = 20; [SSD] = 30; [UPS] = 0; 5) Después de borrar: [CPU] = 25; [RAM] = 20; [SSD] = 30; [UPS] = 0; 6) Después de borrar: [CPU] = 25; [RAM] = 20; [UPS] = 0; 7) m.size() = 3 8) Mapa vacío: true
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 230 | C++98 |
Key
no se requería que fuera
CopyConstructible
(una clave de tipo
Key
podría no poder ser construida)
|
Key
también se requiere que
sea CopyConstructible |
| LWG 464 | C++98 |
acceder a un
map
const por clave era inconveniente
|
se proporcionó la función
at
|
Véase también
|
colección de pares clave-valor, ordenados por claves
(plantilla de clase) |
|
|
(C++11)
|
colección de pares clave-valor, dispersos por claves, claves únicas
(plantilla de clase) |
|
(C++23)
|
adapta dos contenedores para proporcionar una colección de pares clave-valor, ordenados por claves únicas
(plantilla de clase) |