carte_non ordonnée est un conteneur associé qui stocke les éléments formés par la combinaison d'une valeur clé et d'une valeur mappée. La valeur clé est utilisée pour identifier de manière unique l'élément et la valeur mappée est le contenu associé à la clé. La clé et la valeur peuvent être de n’importe quel type prédéfini ou défini par l’utilisateur. En termes simples, un carte_non ordonnée est comme une structure de données de type dictionnaire qui stocke des éléments en elle-même. Il contient des paires successives (clé, valeur), ce qui permet une récupération rapide d'un élément individuel en fonction de sa clé unique.
qu'est-ce qu'un hashset en Java
En interne, unordered_map est implémenté à l'aide de Hash Table, la clé fournie pour mapper est hachée en indices d'une table de hachage, c'est pourquoi les performances de la structure de données dépendent beaucoup de la fonction de hachage mais en moyenne, le coût de rechercher, insérer et supprimer de la table de hachage est O(1).
Note: Dans le pire des cas, sa complexité temporelle peut aller de O(1) à O(n), notamment pour les grands nombres premiers. Dans cette situation, il est fortement conseillé d'utiliser une carte à la place pour éviter d'obtenir une erreur TLE (Time Limit Exceeded).
Syntaxe:

syntaxe unordered_map
Vous trouverez ci-dessous le programme C++ pour démontrer une carte non ordonnée :
C++
// C++ program to demonstrate> // functionality of unordered_map> #include> #include> using> namespace> std;> > // Driver code> int> main()> {> >// Declaring umap to be of> >// type key> >// will be of STRING type> >// and mapped VALUE will> >// be of int type> >unordered_mapint>umap; // insertion de valeurs en utilisant l'opérateur [] umap['techcodeview.com'] = 10; umap['Pratique'] = 20; umap['Contribuer'] = 30; // Parcours d'une carte non ordonnée pour (auto x : umap) cout<< x.first << ' ' << x.second << endl; }> |
>
>Sortir
Contribute 30 Practice 20 techcodeview.com 10>

unordered_map Sortie
Explication: La chose spécifique que justifie cette sortie est que la valeur du résultat de unordered_map est produite de manière aléatoire clé par valeur alors que la carte affiche la valeur et la clé de manière ordonnée.
unordered_map contre unordered_set
| Carte_non ordonnée | Ensemble_non ordonné |
|---|---|
| Unordered_map contient des éléments uniquement sous la forme de paires (clé-valeur). | Unordered_set ne contient pas forcément des éléments sous forme de paires clé-valeur, celles-ci servent principalement à voir la présence/absence d'un ensemble. |
| Opérateur' []' pour extraire la valeur correspondante d’une clé présente dans la carte. | La recherche d'un élément se fait à l'aide d'un trouver () fonction. Donc pas besoin d'opérateur[]. |
Note: Par exemple, considérons le problème du comptage des fréquences de mots individuels. Nous ne pouvons pas utiliser unordered_set (ou set) car nous ne pouvons pas stocker les décomptes alors que nous pouvons utiliser unordered_map.
unordered_map contre carte
| Carte_non ordonnée | Carte |
|---|---|
| La clé unordered_map peut être stockée dans n'importe quel ordre. | La carte est une séquence ordonnée de clés uniques |
| Unordered_Map implémente une structure arborescente déséquilibrée à cause de laquelle il n'est pas possible de maintenir l'ordre entre les éléments | Map implémente une structure arborescente équilibrée c'est pourquoi il est possible de maintenir l'ordre entre les éléments (par parcours d'arbre spécifique) |
| La complexité temporelle des opérations unordered_map est de O(1) en moyenne. | La complexité temporelle des opérations cartographiques est O (log n) |
Méthodes sur unordered_map
De nombreuses fonctions sont disponibles et fonctionnent sur unordered_map. Les plus utiles d'entre eux sont :
- Operator = Operator [] taille vide pour le début et la fin de la capacité de l'itérateur. trouver et compter pour la recherche. insérer et effacer pour modification.
Le tableau ci-dessous montre la liste complète des méthodes d'un unordered_map :
| Méthodes/Fonctions | Description |
|---|---|
| à() | Cette fonction en C++ unordered_map renvoie la référence à la valeur avec l'élément comme clé k |
| commencer() | Renvoie un itérateur pointant vers le premier élément du conteneur dans le conteneur unordered_map |
| fin() | Renvoie un itérateur pointant vers la position après le dernier élément du conteneur dans le conteneur unordered_map |
| seau() | Renvoie le numéro de bucket où se trouve l'élément avec la clé k dans la carte |
| bucket_count | Bucket_count est utilisé pour compter le nombre total. de buckets dans unordered_map. Aucun paramètre n'est requis pour passer dans cette fonction |
| bucket_size | Renvoie le nombre d'éléments dans chaque compartiment de unordered_map |
| compter() | Compter le nombre d'éléments présents dans un unordered_map avec une clé donnée |
| plage_égale | Renvoie les limites d'une plage qui inclut tous les éléments du conteneur avec une clé comparable à k |
| trouver() | Renvoie l'itérateur à l'élément |
| vide() | Vérifie si le conteneur est vide dans le conteneur unordered_map |
| effacer() | Effacer les éléments du conteneur dans le conteneur unordered_map |
La bibliothèque C++ 11 fournit également des fonctions permettant de connaître le nombre de compartiments utilisés en interne, la taille du compartiment, ainsi que la fonction de hachage utilisée et diverses politiques de hachage, mais elles sont moins utiles dans les applications réelles. Nous pouvons parcourir tous les éléments de unordered_map en utilisant Iterator.
C++
// C++ program to demonstrate> // Initialization, indexing,> // and iteration> #include> #include> using> namespace> std;> > // Driver code> int> main()> {> >// Declaring umap to be of> >// type key> >// will be of string type and> >// mapped value will be of double type> >unordered_mapdouble>umap = { //insertion d'un élément directement dans la carte {'One', 1}, {'Deux', 2}, {'Trois', 3} }; // insertion de valeurs en utilisant l'opérateur [] umap['PI'] = 3.14; umap['root2'] = 1,414; umap['root3'] = 1,732; umap['log10'] = 2,302; umap['loge'] = 1.0; // insertion d'une valeur par fonction d'insertion umap.insert(make_pair('e', 2.718)); clé de chaîne = 'PI'; // Si la clé est introuvable dans l'itérateur de la carte // la fin est renvoyée if (umap.find(key) == umap.end()) cout<< key << ' not found
'; // If key found then iterator to that // key is returned else cout << 'Found ' << key << '
'; key = 'lambda'; if (umap.find(key) == umap.end()) cout << key << ' not found
'; else cout << 'Found ' << key << endl; // iterating over all value of umap unordered_mapdouble>::itérateur itr; cout<< '
All Elements :
'; for (itr = umap.begin(); itr != umap.end(); itr++) { // itr works as a pointer to // pair type // itr->stocke d'abord la partie clé et // itr->second stocke la partie valeur cout ' '<< itr->deuxième<< endl; } }> |
>
>Sortir
Found PI lambda not found All Elements : e 2.718 loge 1 log10 2.302 Two 2 One 1 Three 3 PI 3.14 root2 1.414 root3 1.732>
Trouver les fréquences de mots individuels
Étant donné une chaîne de mots, la tâche consiste à trouver les fréquences de chaque mot :
Saisir: str = geeks pour les geeks quiz geeks pratique qa pour ;
Sortir: Les fréquences des mots individuels sont
(pratique, 1)
(pour 2)
(qa, 1)
(quiz, 1)
(des connaisseurs, 3)
Vous trouverez ci-dessous le programme C++ pour implémenter l'approche ci-dessus :
C++
// C++ program to find freq> // of every word using unordered_map> #include> using> namespace> std;> > // Prints frequencies of> // individual words in str> void> printFrequencies(>const> string &str)> {> >// declaring map of type,> >// each word is mapped to its frequency> >unordered_mapint>motFréq ; // décomposer l'entrée en mot en utilisant // string stream // Utilisé pour diviser les mots stringstream ss(str); // Pour stocker des mots individuels string word; while (ss>> mot) wordFreq[mot]++; // itère maintenant sur mot, paire de fréquences // et les imprime au format unordered_mapint>:: iterator p; pour (p = wordFreq.begin(); p != wordFreq.end(); p++) cout<< '(' ', ' << p->deuxième<< ')
'; } // Driver code int main() { string str = 'geeks for geeks geeks quiz ' 'practice qa for'; printFrequencies(str); return 0; }> |
>
panda fondre
>Sortir
(practice, 1) (for, 2) (qa, 1) (quiz, 1) (geeks, 3)>
Articles récents sur unordered_map