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