La structure de données sous-jacente du conteneur associatif: unordered_map / set est basé sur la table de hachage, et l'ordre d'insertion n'est pas garanti; map / set est basé sur l'arbre rouge-noir et automatiquement trié selon la clé

Les éléments du conteneur associatif sont enregistrés et accessibles par mots-clés, ce qui permet une recherche et un accès efficaces par mots-clés.

1. Conteneur de carte:
les éléments du conteneur de carte sont des paires clé-valeur : la clé fonctionne comme un index et la valeur représente les données associées à l'index.
Le type de conteneur associatif de carte:

  • carte :Tableau associatif basé sur un arbre rouge-noir; Enregistrer les paires clé-valeur;Les données sont stockées après le tri automatique de la clé
  • multimap: une carte dont les mots-clés peuvent être répétés
  • unordered_map :Dans une carte organisée par une fonction de hachage, les données du conteneur sont stockées dans le désordre et il n'est pas garanti qu'elles soient cohérentes avec l'ordre d'insertion
  • unordered_multimap: carte organisée par hachage; les mots-clés peuvent apparaître à plusieurs reprises
map<string, int> val1;
map<string, int> val2 = {
    
    {
    
    "111",1},{
    
    "222",4}};
map<string, int> val3 = val2 ;
auto ptr = val3.find("111"); // 返回的是迭代器类型
val["234"] = 4; // 最常用的插入方式
val3.insert(pair<string,int>("123",3)); // 插入的方式
val3.erase(ptr); // 删除的方法1
val3.erase("123"); // 删除的方法2

Remarque: en raison dela carte ne contient pas de mots clés en double, L'insertion répétée d'un élément de mot-clé existant ne sera donc pas ajoutée au conteneur de carte.La valeur correspondant au mot-clé stocké dans le conteneur de carte est toujours la valeur correspondant au mot-clé ajouté au conteneur pour la première fois

2. Conteneur d'ensemble:
Chaque élément du conteneur d'ensemble contient un seul mot-clé . Vous pouvez le voir de cette façon. En fait, un ensemble est une collection utilisée pour stocker des éléments du même type.
Type de conteneur associatif d'ensemble:

  • set: le mot-clé est la valeur, c'est-à-dire le conteneur qui ne stocke que le mot-clé,La structure de données sous-jacente est un arbre rouge-noir, Ordonné, pas répété;
  • multiset: la structure de données sous-jacente est un arbre rouge-noir, qui est ordonné et répétable.
  • unordered_set: ensemble non ordonné
  • unordered_multiset: un ensemble non ordonné où les mots-clés peuvent être répétés
set<string> a1={
    
    "fengxin","666"};
set<string> a2=a1;
set<string> a;  //empty set
a.insert("123");  // 插入一个元素
a.erase("123");    //删除关键字为123的元素
int numb = a.count("123"); // 返回0表示没有
auto ptr = val3.find("fengxin"); // 返回的是迭代器类型,不是val3.end()则表明存在

Remarque: non ordonné: la couche inférieure est implémentée par une table de hachage (algorithme de hash bucket). S'il n'y a pas de mot clé, la couche inférieure est implémentée par un arbre rouge-noir.

Pourquoi utiliser unordered_map au lieu de hash_map?
En raison de l'avancement de la standardisation, unordered_map appartenait à l'origine à la branche boost et à std :: tr1, tandis que hash_map appartenait à des conteneurs non standard.
De plus, après utilisation, il semble que la vitesse est similaire à hash_map, mais il prend en charge la chaîne comme clé, et des objets complexes peuvent également être utilisés comme clés.

Référence: Résumé du conteneur associatif C ++

Pour résumer:

1. La structure de données sous-jacente de unordered_map / set est basée sur la table de hachage, de sorte que l'ordre d'insertion n'est pas cohérent avec l'ordre dans le conteneur. Si vous voulez que l'ordre d'insertion soit cohérent avec l'ordre dans le conteneur, vous devez utiliser une liste liée list<pair<int,int>> containerou utiliser une liste liée pour enregistrer la clé et utiliser map pour conserver la valeur correspondante. .
2. La structure de données sous-jacente de la carte / de l'ensemble est basée sur un arbre rouge-noir, qui est automatiquement trié en fonction de la clé.

Je suppose que tu aimes

Origine blog.csdn.net/qq_33726635/article/details/106553317
conseillé
Classement