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