Junior
Quelle est la différence entre map et unordered_map en C++?
sobes.tech IA
Réponse de l'IA
std::map — un conteneur associatif qui stocke des paires "clé-valeur", triées par la clé. Basé sur un arbre rouge-noir. Le temps d'accès, d'insertion et de suppression des éléments est logarithmique (O(log n)).
std::unordered_map — un conteneur associatif qui stocke des paires "clé-valeur" dans une table de hachage. Les éléments ne sont pas triés. En moyenne, le temps d'accès, d'insertion et de suppression des éléments est constant (O(1)), mais dans le pire des cas, il peut être linéaire (O(n)) en raison de collisions. Nécessite une fonction de hachage pour le type de clé et un opérateur de comparaison d'égalité (operator==).
| Caractéristique | std::map |
std::unordered_map |
|---|---|---|
| Base | Arbre rouge-noir | Table de hachage |
| Tri des éléments | Par clé | Non |
| Complexité moyenne des opérations (accès, insertion, suppression) | O(log n) | O(1) |
| Complexité dans le pire des cas (accès, insertion, suppression) | O(log n) | O(n) (en cas de collisions) |
| Exigences pour la clé | < opérateur |
Fonction de hachage, == opérateur |
| Consommation de mémoire | Plus | Moins (en moyenne, mais peut varier) |
Exemple d'utilisation :
#include <map>
#include <unordered_map>
#include <string>
int main() {
// Utilisation de std::map
std::map<std::string, int> my_map;
my_map["apple"] = 1;
my_map["banana"] = 2;
my_map["orange"] = 3;
// Les éléments sont stockés dans l'ordre trié par clé (apple, banana, orange)
// Utilisation de std::unordered_map
std::unordered_map<std::string, int> my_unordered_map;
my_unordered_map["apple"] = 1;
my_unordered_map["banana"] = 2;
my_unordered_map["orange"] = 3;
// Les éléments sont stockés sans ordre défini
return 0;
}