logo

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

comment vérifier la taille de l'écran








// 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 << ' : ' ' '; } }>

>

10 sur 100,00

>

Sortir

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

Utilisez std :: unordered_map lorsque

fmoviez
  • 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




qui a fait l'école

// 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é.