Carte en C++ Bibliothèque de modèles standard (STL)

Qu'est-ce que la carte dans C++? Syntaxe

In C++, un CARTE est un conteneur associatif stockant des éléments sous une forme mappée. Chaque élément de la carte est composé d'une valeur-clé et d'une valeur mappée. Deux valeurs mappées ne peuvent pas partager les mêmes valeurs clés.

Les valeurs clés sont utiles pour trier et identifier les éléments de manière unique. Les valeurs mappées servent à stocker le contenu associé à la clé. Les deux types peuvent différer, mais le type de membre les combine via un type de paire qui combine les deux.

Pourquoi utiliser std :: map ?

Voici les raisons d’utiliser la carte :

  • std :: map stocke les clés uniques uniquement dans un ordre trié en fonction des critères de tri choisis.
  • Il est simple et rapide de rechercher des éléments à l'aide de la clé.
  • Un seul élément est attaché à chaque clé.
  • std::map peut être utilisé comme tableau associatif.
  • std::map est implémentable à l'aide d'arbres binaires (équilibrés).

Syntaxe

Pour déclarer std::map, utilisez cette syntaxe :

std::map<key_datatype, value_datatype>map_name; 
  • Le manuel de formation key_datatype désigne le type de données des clés de carte.
  • Le manuel de formation value_datatype désigne le type de données des valeurs correspondant aux clés de la carte.
  • Le manuel de formation map_name est le nom de la carte.

Par exemple :

map<string, int> my_map; 

Nous avons déclaré une carte nommée my_map. La carte aura une chaîne comme clé types de données et entiers comme valeurs Type de données.

Types de membres

Les fonctions membres peuvent utiliser les types de membres suivants comme paramètres ou comme type de retour :

  • type de clé: Clé (le premier paramètre du modèle)
  • type_mappé : T (le deuxième paramètre du modèle)
  • clé_compare : Comparer (le troisième paramètre du modèle)
  • type_allocateur : Alloc (le quatrième paramètre du modèle)
  • type de valeur: paire
  • valeur_compare : Classe de fonctions imbriquée pour comparer des éléments
  • référence: allocator_type :: référence
  • const_référence : allocator_type :: const_reference
  • aiguille: allocator_type :: pointeur
  • const_pointeur : allocator_type :: const_pointer
  • itérateur : un itérateur bidirectionnel vers le value_type
  • const_iterator : un itérateur bidirectionnel vers le const value_type
  • inverse_iterator : un itérateur inverse
  • const_reverse_iterator : un itérateur inverse constant
  • type_différence : ptrdiff_t
  • type de taille: taille_t

Fonctions intégrées de std :: map

std::map est livré avec des fonctions intégrées. Certains d'entre eux incluent :

  • commencer() - Cette fonction renvoie l'itérateur au premier élément de la carte.
  • taille() -Cette fonction renvoie le nombre d'éléments dans une carte.
  • vide() -Cette fonction renvoie une valeur booléenne indiquant si une carte est vide.
  • insert (paire (clé, valeur)) – Cette fonction insère une nouvelle paire clé-valeur dans une carte.
  • trouver (val) – Cette fonction donne l'itérateur à l'élément val s'il est trouvé. Sinon, il renverra m.end().
  • Effacer (position de l'itérateur) – Cette fonction supprime l'élément à la position pointée par l'itérateur.
  • effacer (const g) – Cette fonction supprime la valeur-clé g d’une carte.
  • Clair () -Cette fonction supprime tous les éléments d'une carte.

Itération sur les éléments de la carte

Vous pouvez parcourir les éléments de la carte. Nous devons simplement créer un itérateur et l'utiliser pour cela.
Par exemple :

1 Exemple:

#include <iostream>
#include <string>
#include <map> 

using namespace std;
int main() {

	map<int, string> Students;

	Students.insert(std::pair<int, string>(200, "Alice"));

	Students.insert(std::pair<int, string>(201, "John"));

	cout << "Map size is: " << Students.size() << endl;

	cout << endl << "Default map Order is: " << endl;

	for (map<int, string>::iterator it = Students.begin(); it != Students.end(); ++it) {

		cout << (*it).first << ": " << (*it).second << endl;
	}
}

Sortie :

Itération sur les éléments de la carte

Voici une capture d'écran du code :

Itération sur les éléments de la carte

Explication du code :

  1. Incluez le fichier d'en-tête iostream dans notre code pour utiliser ses fonctions.
  2. Incluez le fichier d'en-tête de chaîne dans notre code pour utiliser ses fonctions.
  3. Incluez le fichier d'en-tête de la carte dans notre code pour utiliser ses fonctions.
  4. Incluez l'espace de noms std dans notre code pour utiliser ses classes sans l'appeler.
  5. Appeler le main() fonction. Le { marque le début du corps de la fonction.
  6. Créez une carte nommée Étudiants où les clés seront des entiers et les valeurs seront des chaînes.
  7. Insérez des valeurs dans la carte Étudiants. Une clé de 200 et une valeur d'Alice seront insérées dans la carte.
  8. Insérez des valeurs dans la carte Étudiants. Une clé de 201 et une valeur de John seront insérées dans la carte.
  9. Utilisez l'option size() fonction pour obtenir la taille de la carte nommée Étudiants. Cela devrait renvoyer un 2.
  10. Imprimez du texte sur la console.
  11. Utilisez une boucle for pour créer un itérateur nommé pour parcourir les éléments de la carte nommés Students.
  12. Imprimez les valeurs de la carte Etudiants sur la console.
  13. Fin du corps de la boucle for.
  14. Fin du corps du main() la fonction.

Insertion de données dans std :: map

Vous pouvez saisir des éléments dans std::map en utilisant le insert() fonction. N'oubliez pas que les clés std::map doivent être uniques.

Ainsi, il vérifie d’abord si chaque clé est présente dans la carte. S'il est présent, l'entrée ne sera pas insérée, mais elle renvoie l'itérateur de l'entrée existante. S'il n'est pas présent, l'entrée est insérée.

La fonction présente les variantes suivantes :

  • insérer (paire) – avec cette variation, une paire clé-valeur est insérée dans la carte.
  • insérer (start_itr, end_itr) – avec cette variante, les entrées seront insérées dans la plage définie par start_itr et end_itr à partir d'une autre carte.

Le manuel de formation insert_or_assing() la fonction fonctionne de la même manière que insert() fonction, mais si la clé donnée existe déjà dans la carte, sa valeur sera modifiée.

2 Exemple:

#include <map>
#include <iostream>

using namespace std;

int main() {

	map<int, int> m{ {1,3} , {2,4} , {3,5} };

	m.insert({ 5, 6 });
	m.insert({ 1, 8 });

	m.insert_or_assign(1, 6);  
	
	cout << "Key\tElement\n";
	for (auto itr = m.begin(); itr != m.end(); ++itr) {
		cout << itr->first << '\t' << itr->second << '\n';
	}
	return 0;
}

Sortie :

Insertion de données dans std :: map

Voici une capture d'écran du code :

Insertion de données dans std :: map

Explication du code :

  1. Incluez le fichier d'en-tête de la carte dans notre code pour utiliser ses fonctions.
  2. Incluez le fichier d'en-tête iostream dans notre code pour utiliser ses fonctions.
  3. Incluez l'espace de noms std dans notre code pour utiliser ses classes sans l'appeler.
  4. Appeler le main() fonction. Le { marque le début du corps de la fonction.
  5. Créez une carte nommée m où les clés seront des entiers et les valeurs seront des entiers. Trois entrées ont été faites sur la carte.
  6. Insérez une nouvelle entrée dans la carte m. Une clé de 5 et une valeur de 6 seront insérées dans la carte.
  7. Essayer de faire une entrée dans une clé déjà existante. La clé 1 étant déjà présente dans la carte, la saisie ne sera pas effectuée.
  8. Le insert_or_assign() fonction pour insérer ou modifier une entrée existante. Puisque la clé 1 existe déjà, sa valeur sera changée en 6.
  9. Imprimez du texte sur la console. Le caractère « \t » crée un espace horizontal tandis que le caractère « \n » déplace le curseur de la souris vers la ligne suivante.
  10. Utiliser un pour la boucle pour créer un itérateur nommé itr pour parcourir les éléments de la carte nommés m.
  11. Imprimez les valeurs de la carte m sur la console. Le caractère « \t » crée un espace horizontal entre chaque clé et sa valeur correspondante. En revanche, le caractère « \n » déplace le curseur de la souris vers la ligne suivante après chaque itération.
  12. Fin du corps de la boucle.
  13. Le programme doit renvoyer de la valeur une fois terminé.
  14. Fin du corps du main() la fonction.

Recherche sur une carte

Nous pouvons utiliser le find() Fonction permettant de rechercher des éléments dans une carte par leurs clés. Si la clé n'est pas trouvée, la fonction renvoie std::map::end. Sinon, un itérateur de l'élément recherché sera renvoyé.

3 Exemple:

#include <iostream>
#include <string>
#include <map> 
using namespace std;
int main() {
	map<int, string> Students;
	Students.insert(std::pair<int, string>(200, "Alice"));
	Students.insert(std::pair<int, string>(201, "John"));
	std::map<int, string>::iterator it = Students.find(201);
	if (it != Students.end()) {
		std::cout << endl << "Key 201 has the value: => "<< Students.find(201)->second << '\n';
	}
}

Sortie :

Recherche sur une carte

Voici une capture d'écran du code :

Recherche sur une carte

Explication du code :

  1. Incluez le fichier d'en-tête iostream dans notre code pour utiliser ses fonctions sans obtenir d'erreurs.
  2. Incluez le fichier d'en-tête de chaîne dans notre code pour utiliser ses fonctions sans obtenir d'erreurs.
  3. Incluez le fichier d'en-tête de la carte dans notre code pour utiliser ses fonctions sans obtenir d'erreurs.
  4. Incluez l'espace de noms std dans notre code pour utiliser ses classes sans l'appeler.
  5. Appeler le main() fonction. Le { marque le début du corps de main() la fonction.
  6. Créez une carte nommée Students dont les clés seront des entiers et des chaînes de valeurs.
  7. Insérez des valeurs dans la carte Étudiants. Une clé de 200 et une valeur d'Alice seront insérées dans la carte.
  8. Insérez des valeurs dans la carte Étudiants. Une clé de 201 et une valeur de John seront insérées dans la carte.
  9. Recherchez la valeur associée à une clé de 201.
  10. Utilisez une instruction if pour vérifier si la valeur de la clé est trouvée.
  11. Imprimez la valeur de la clé à côté du texte sur la console.
  12. Fin du corps de l'instruction if.
  13. Fin du corps du main() la fonction.

Suppression de données d'une carte

Nous pouvons utiliser le erase() fonction pour supprimer une valeur d’une carte. Nous créons simplement un itérateur qui pointe vers l'élément à supprimer. L'itérateur est ensuite transmis au erase() la fonction.

4 Exemple:

#include <iostream>
#include <string>
#include <map>

using namespace std;
int main() {

	map<std::string, int> my_map;

	my_map.insert(std::make_pair("cow", 1));

	my_map.insert(std::make_pair("cat", 2));

	my_map["lion"] = 3;

	map<std::string, int>::iterator it = my_map.find("cat");

	my_map.erase(it);

	for (map<string, int>::iterator it = my_map.begin(); it != my_map.end(); ++it)

		cout << (*it).first << ": " << (*it).second << endl;

  return 0;
}

Sortie :

Suppression de données d'une carte

Voici une capture d'écran du code :

Suppression de données d'une carte

Explication du code :

  1. Incluez le fichier d'en-tête iostream dans notre code pour utiliser ses fonctions.
  2. Incluez le fichier d'en-tête de chaîne dans notre code pour utiliser ses fonctions.
  3. Incluez le fichier d'en-tête de la carte dans notre code pour utiliser ses fonctions.
  4. Incluez l'espace de noms std dans notre code pour utiliser ses classes sans l'appeler.
  5. Appeler le main() fonction. Le { marque le début du corps du main() la fonction.
  6. Créez une carte nommée my_map dont les clés seront des chaînes et des valeurs entières.
  7. Insérez des valeurs dans la carte my_map. Une clé de Vache et une valeur de 1 seront insérées dans la carte.
  8. Insérez des valeurs dans la carte my_map. Une clé de Cat et une valeur de 2 seront insérées dans la carte.
  9. Ajoutez une valeur 3 dans la map my_map avec une clé de lion.
  10. Créez un itérateur pour parcourir la carte my_map à la recherche de la clé cat.
  11. Supprimez l'élément pointé par l'itérateur.
  12. Utilisez un itérateur pour parcourir les éléments de la carte my_map du début à la fin.
  13. Imprimez le contenu de la carte my_map sur la console.
  14. Le programme doit renvoyer une sortie une fois terminé.
  15. Fin du corps du main() la fonction.

Résumé

  • Une carte est un conteneur associatif qui stocke des éléments sous une forme mappée.
  • Chaque élément de la carte a une valeur clé et une valeur mappée.
  • Dans une carte, deux valeurs mappées ne peuvent pas partager de valeurs clés.
  • Les valeurs clés aident à trier et à identifier les éléments de manière unique.
  • Les valeurs mappées aident à stocker le contenu associé à la clé.
  • C++ map stocke les clés uniques dans un ordre trié.
  • Travailler avec C++ map, nous créons un itérateur pour parcourir les éléments.
  • Avec l'itérateur, nous pouvons effectuer des tâches telles que rechercher et supprimer des éléments de la carte.