mapa vs unordered_map en C++

Requisito previo: std::map , std::unordered_map
Cuando se trata de eficiencia, hay una gran diferencia entre mapas y mapas desordenados. 
Debemos conocer el funcionamiento interno de ambos para decidir cuál usar.

Diferencia : 

                  | map             | unordered_map
---------------------------------------------------------
Ordering        | increasing  order   | no ordering
                | (by default)        |

Implementation  | Self balancing BST  | Hash Table
                | like Red-Black Tree |  

search time     | log(n)              | O(1) -> Average 
                |                     | O(n) -> Worst Case

Insertion time  | log(n) + Rebalance  | Same as search
                      
Deletion time   | log(n) + Rebalance  | Same as search

Utilice std::map cuando 

  • Necesitas datos ordenados.
  • Tendría que imprimir/acceder a los datos (en orden).
  • Necesita predecesor/sucesor de elementos.
  • Vea las ventajas de BST sobre Hash Table para más casos.

CPP

// CPP program to demonstrate use of std::map
#include <bits/stdc++.h>
 
int main()
{
    // Ordered map
    std::map<int, int> order;
 
    // Mapping values to keys
    order[5] = 10;
    order[3] = 5;
    order[20] = 100;
    order[1] = 1;
 
    // Iterating the map and
    // printing ordered values
    for (auto i = order.begin(); i
         != order.end(); i++) {
        std::cout << i->first
                  << " : "
                  << i->second << '\n';
    }
}
Producción

1 : 1
3 : 5
5 : 10
20 : 100

\

 

CPP-STL-Self-Paced-Course

Utilice std::unordered_map cuando 

  • Debe llevar la cuenta de algunos datos (Ejemplo: strings) y no es necesario ordenar.
  • Necesita acceso a un solo elemento, es decir, sin recorrido.

CPP

// CPP program to demonstrate use of
// std::unordered_map
#include <bits/stdc++.h>
 
int main()
{
    // Unordered map
    std::unordered_map<int, int> order;
 
    // Mapping values to keys
    order[5] = 10;
    order[3] = 5;
    order[20] = 100;
    order[1] = 1;
 
    // Iterating the map and
    // printing unordered values
    for (auto i = order.begin();
         i != order.end(); i++)
    {
        std::cout << i->first
                  << " : "
                  << i->second << '\n';
    }
}
Producción

1 : 1
20 : 100
5 : 10
3 : 5

Veamos las diferencias en forma tabular -:

  mapa mapa_desordenado
1. el mapa se define en el archivo de encabezado #include <mapa> unordered_map se define en el archivo de encabezado #include <unordered_map>
2. Se implementa mediante un árbol rojo-negro. Se implementa usando una tabla hash.
3. Es lento. Es rápido.
4. La complejidad del tiempo para las operaciones es O (log N) La complejidad del tiempo para las operaciones es O(1)
5. map se utiliza para almacenar elementos como pares clave-valor en orden ordenado. unordered_map se utiliza para almacenar elementos como pares clave-valor en orden no ordenado.

Publicación traducida automáticamente

Artículo escrito por Rohit Thapliyal y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *