logo

unordered_map en C++ STL

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 avec exemple

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 avec exemple

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