STL: unordered_map

Solo usé unordered_map, aprendamos.
Como sugiere el nombre, esta es la estructura del mapa sin clasificar.
La plantilla se define de la siguiente manera:

template < class Key,                                    // unordered_map::key_type
           class T,                                      // unordered_map::mapped_type
           class Hash = hash<Key>,                       // unordered_map::hasher
           class Pred = equal_to<Key>,                   // unordered_map::key_equal
           class Alloc = allocator< pair<const Key,T> >  // unordered_map::allocator_type
           > class unordered_map;

Incluyendo pares clave-valor, reglas hash, reglas de comparación y especifique el tipo de objeto asignador.

Internamente, los elementos en unorder_map no se ordenan de acuerdo con ningún orden específico de sus claves o valores mapeados, sino que se organizan en depósitos de acuerdo con sus valores hash para permitir un acceso directo y rápido a elementos individuales a través de sus valores clave (promedio complejidad temporal) Constante).

Hay cuatro formas de construir un mapa_desordenado:
1, construcción vacía
2, construcción de copia
3, construcción de movimiento
4, construcción de rango
5, construcción de valor inicial
Echemos un vistazo a un código de muestra oficial para comprender:

// constructing unordered_maps
#include <iostream>
#include <string>
#include <unordered_map>

typedef std::unordered_map<std::string,std::string> stringmap;

stringmap merge (stringmap a,stringmap b) {
    
    
  stringmap temp(a); temp.insert(b.begin(),b.end()); return temp;
}

int main ()
{
    
    
  stringmap first;                              // empty
  stringmap second ( {
    
    {
    
    "apple","red"},{
    
    "lemon","yellow"}} );       // init list
  stringmap third ( {
    
    {
    
    "orange","orange"},{
    
    "strawberry","red"}} );  // init list
  stringmap fourth (second);                    // copy
  stringmap fifth (merge(third,fourth));        // move
  stringmap sixth (fifth.begin(),fifth.end());  // range

  std::cout << "sixth contains:";
  for (auto& x: sixth) std::cout << " " << x.first << ":" << x.second;
  std::cout << std::endl;

  return 0;
}
función Características
comenzar Devuelve el iterador de avance del primer par clave-valor.
fin Devuelve el iterador de avance de la posición después del último par clave-valor.
ccomenzar Igual que begin, pero con la adición del atributo const, el iterador devuelto no se puede usar para modificar el contenido.
unos pocos Igual que end, pero con la adición del atributo const, el iterador devuelto no se puede usar para modificar el contenido
vacío Devuelve verdadero si está vacío, de lo contrario devuelve falso
Talla Devuelve el número de pares clave-valor.
tamaño máximo Devuelve el número máximo de pares clave-valor que se pueden acomodar, los resultados de los diferentes sistemas son diferentes
operador [clave] Puede ser operado por subíndice como una matriz. Si el subíndice actual no tiene un valor de par de claves, inserte un nuevo valor de par de claves
en (clave) Devuelve el valor correspondiente a la clave, si no existe, devuelve la excepción out_of_range

El hoyo que pisaron los predecesores con unordered_map: el hoyo de unordered_map

Para obtener más información, puede ir al sitio web oficial para ver: STL: unordered_map
o ver: Programming Network

Supongo que te gusta

Origin blog.csdn.net/weixin_45146520/article/details/109045573
Recomendado
Clasificación