map vs unordered_map en C++

Prérequis : std :: carte , std :: unordered_map
En matière d'efficacité, il existe une énorme différence entre les cartes et les cartes non ordonnées.
Nous devons connaître le fonctionnement interne des deux pour décider lequel utiliser.

Différence :

 | map | unordered_map --------------------------------------------------------- Ordering | increasing order | no ordering | of keys(by default) | Implementation | Self balancing BST | Hash Table | like Red-Black Tree | search time | log(n) | O(1) ->Moyenne | | O(n) -> Temps d'insertion dans le pire des cas | log(n) + Rééquilibrer | Identique à la recherche Heure de suppression | log(n) + Rééquilibrer | Identique à la recherche 

Utilisez std :: map quand

  • Vous avez besoin de données ordonnées.
  • Vous devrez imprimer/accéder aux données (dans l'ordre trié).
  • Vous avez besoin d'un prédécesseur/successeur d'éléments.
  • Voir les avantages de BST par rapport à Hash Table pour plus de cas.

RPC




// CPP program to demonstrate use of std::map> #include> int> main()> {> > // Ordered map> > std::map <> int> ,> int> >commander ;> > // Mapping values to keys> > order[5] = 10;> > order[3] = 500;> > order[20] = 100;> > order[1] = 1;> > // Iterating the map and> > // printing ordered values> > for> (> auto> i = order.begin(); i> > != order.end(); i++) {> > std::cout < < ' : ' ' '; } }>

Sortir

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

Utilisez std :: unordered_map lorsque

  • Vous devez compter certaines données (exemple – chaînes) et aucun classement n’est requis.
  • Vous avez besoin d'un accès à un seul élément, c'est-à-dire pas de traversée.

RPC




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

Sortir

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

Voyons les différences sous forme de tableau - :

carte carte_non ordonnée
1. la carte est définie dans le fichier d'en-tête #include unordered_map est défini dans le fichier d'en-tête #include
2. Il est mis en œuvre par arbre rouge-noir . Il est implémenté à l'aide d'une table de hachage.
3. C'est lent. C'est rapide.
4. Complexité temporelle pour les opérations est O (log N) La complexité temporelle des opérations est O(1)
5. map est utilisé pour stocker des éléments sous forme de paires clé-valeur, triés par clé. unordered_map est utilisé pour stocker des éléments sous forme de paires clé-valeur dans un ordre non trié.