Espacios de nombres
Variantes
Acciones

std::map

De cppreference.com
< cpp‎ | container
 
 
 
 
Definido en el archivo de encabezado <map>
template<

    class Key,
    class T,
    class Compare =std::less<Key>,
    class Allocator =std::allocator<std::pair<const Key, T>>

>class map;
(1)
namespace pmr {

    template<
        class Key,
        class T,
        class Compare =std::less<Key>
    >using map = std::map<Key, T, Compare,
                           std::pmr::polymorphic_allocator<std::pair<const Key, T>>>;

}
(2) (desde C++17)

std::map es un contenedor asociativo ordenado que contiene pares clave-valor con claves únicas. Las claves se ordenan usando la función de comparación Compare. Las operaciones de búsqueda, eliminación e inserción tienen una complejidad logarítmica. Los mapas generalmente se implementan como árboles rojo-negro.

Los iteradores de std::map iteran en orden ascendente de claves, donde el orden ascendente se define por la comparación que se utilizó para la construcción. Es decir, dado

  • m, un std::map
  • it_l e it_r, iteradores desreferenciables 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 usa los requisitos Comparar la unicidad se determina usando la relación de equivalencia. En términos imprecisos, dos objetos a y b se consideran equivalentes (no únicos) si ninguno se compara menos que el otro: !comp(a, b) && !comp(b, a).

std::map cumple con los requisitos de Contenedor, ContenedorConscienteDeAsignador, ContenedorAsociativo y ContenedorReversible.

Contenido

[editar]Parámetros de plantilla

[editar]Tipos miembro

Tipo miembro Definición
key_typeKey[editar]
mapped_typeT[editar]
value_typestd::pair<const Key, T>[editar]
size_type Tipo entero sin signo (por lo general std::size_t) [editar]
difference_type Tipo entero con signo (por lo general std::ptrdiff_t) [editar]
key_compareCompare[editar]
allocator_typeAllocator[editar]
referenceAllocator::reference(hasta C++11)
value_type&(desde C++11)[editar]
const_referenceAllocator::const_reference(hasta C++11)
const value_type&(desde C++11)[editar]
pointerAllocator::pointer(hasta C++11)
std::allocator_traits<Allocator>::pointer(desde C++11)[editar]
const_pointerAllocator::const_pointer(hasta C++11)
std::allocator_traits<Allocator>::const_pointer(desde C++11)[editar]
iteratorIteradorBidireccionalLegado[editar]
const_iteratorIteradorBidireccionalLegado constante [editar]
reverse_iteratorstd::reverse_iterator<iterator>[editar]
const_reverse_iteratorstd::reverse_iterator<const_iterator>[editar]
node_type(desde C++17) Una especialización de node handle que representa un nodo del contenedor. [editar]
insert_return_type(desde C++17) Tipo que describe el resultado de insertar un tipo nodo node_type, una especialización de

template<class Iter, class NodeType>
struct/*no especificado*/{
    Iter     position;
    bool     inserted;
    NodeType node;
};

ejemplado con los argumentos de plantilla iterator y node_type. [editar]

[editar]Clases miembro

Compara objetos de tipo value_type.
(clase)[editar]

[editar]Funciones miembro

Construye el contenedor map.
(función miembro pública)[editar]
Destruye el contenedor map.
(función miembro pública)[editar]
Asigna valores al contenedor.
(función miembro pública)[editar]
Devuelve el asignador de memoria asociado.
(función miembro pública)[editar]
Acceso a elementos
(C++11)
Accede al elemento especificado con comprobación de límites.
(función miembro pública)[editar]
Accede o inserta el elemento especificado.
(función miembro pública)[editar]
Iteradores
Devuelve un iterador al principio.
(función miembro pública)[editar]
(C++11)
Devuelve un iterador al final.
(función miembro pública)[editar]
Devuelve un iterador inverso al principio.
(función miembro pública)[editar]
(C++11)
Devuelve un iterador inverso al final.
(función miembro pública)[editar]
Capacidad
Comprueba si el contenedor está vacío.
(función miembro pública)[editar]
Devuelve el número de elementos.
(función miembro pública)[editar]
Devuelve el número máximo posible de elementos.
(función miembro pública)[editar]
Modificadores
Borra el contenido.
(función miembro pública)[editar]
Inserta elementos o nodos(desde C++17)
(función miembro pública)[editar]
Inserta un rango de elementos.
(función miembro pública)[editar]
Inserta un elemento o asigna el elemento actual si la clave ya existe.
(función miembro pública)[editar]
(C++11)
Construye el elemento en el sitio.
(función miembro pública)[editar]
Construye elementos en el sitio utilizando una pista.
(función miembro pública)[editar]
Inserta en el sitio si la clave no existe; no hace nada si la clave existe.
(función miembro pública)[editar]
Borra elementos
(función miembro pública)[editar]
Intercambia el contenido.
(función miembro pública)[editar]
(C++17)
Extrae nodos del contenedor
(función miembro pública)[editar]
(C++17)
Mueve los nodos de otro contenedor.
(función miembro pública)[editar]
Búsqueda
Devuelve el número de elementos que coinciden con una clave específica.
(función miembro pública)[editar]
Encuentra un elemento con una clave específica.
(función miembro pública)[editar]
(C++20)
Comprueba si el contenedor contiene un elemento con una clave específica.
(función miembro pública)[editar]
Devuelve un rango de elementos que coinciden con una clase específica.
(función miembro pública)[editar]
Devuelve un iterador al primer elemento no menor que la clave dada.
(función miembro pública)[editar]
Devuelve un iterador al primer elemento mayor que la clave dada.
(función miembro pública)[editar]
Observadores
Devuelve la función que compara las claves.
(función miembro pública)[editar]
Devuelve la función que compara las claves en objetos de tipo value_type.
(función miembro pública)[editar]

[editar]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 map.
(plantilla de función)[editar]
Especializa el algoritmo std::swap.
(plantilla de función)[editar]
Borra todos los elementos que satisfacen un criterio específico.
(plantilla de función)[editar]

Guías de deducción

(desde C++17)

[editar]Notas

Macro de prueba de característicaValorEstándarComentario
__cpp_lib_containers_ranges202202L(C++23)Construcción e inserción de rangos para contenedores.

[editar]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 los servicios de C++17for(constauto&[clave, valor]: m)std::cout<<'['<< clave <<"] = "<< valor <<"; ";   // alternativa en C++11:// for (const auto& n : m)// std::cout << n.first << " = " << n.second << "; ";//// alternativa enC++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 map 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 valor nuevo print_map("2) Mapa actualizado: ", m);   // Using operator[] with non-existent key always performs an insertstd::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, [](constauto& 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) El mapa está 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) El mapa está vacío: true

[editar]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 230 C++98 No se requería que Key fuera ConstruiblePorCopia
(una clave de tipo Key podría no ser capaz de construirse.)
También se requiere que Key
sea ConstruiblePorCopia.
LWG 464 C++98 Acceder a un map constante por clave era inconveniente. Se proporcionó la función at.

[editar]Véase también

Colección de pares de clave y valor, ordenados por claves.
(plantilla de clase)[editar]
(desde C++11)
Colección de pares de clave-valor, dispersos (hashed) por claves, donde las claves son únicas.
(plantilla de clase)[editar]
(C++23)
Adapta dos contenedores para proporcionar una colección de pares clave-valor, ordenados por claves únicas.
(plantilla de clase)[editar]
close