bibliothèque de modèles de classe standard c++ STL (conteneurs associatifs (map, multimap class templates), les méthodes d'affectation de ces deux conteneurs sont différentes des autres)

Ce blog reprend les conteneurs associatifs (set, multiset) du blog précédent, qui présentent tous deux des similitudes et des différences. Les données et les valeurs clés des éléments des types map et multimap sont séparées, tandis que set, multiset Les données et la valeur de clé des éléments du type multiset sont un emplacement, c'est-à-dire que les données stockées sont également appelées la clé des données.

conteneur de carte

La syntaxe de création d'un modèle de classe de carte est la suivante :

std::map<key,type,predicate> name;

Cette méthode crée un objet de carte vide nommé name qui contient des données de type type. Cet objet utilise la fonction spécifiée par le prédicat pour ordonner les éléments de la collection. Par exemple, pour créer un objet map vide pour les entiers, écrivez :

std::map<int,int,std::less<int>> intmap;

 map<key,type,predicate> name(mymap);

//Cette méthode utilise le constructeur de copie pour générer un objet de carte à partir d'une carte mymap existante.

map<key,type,predicate> name(first,last);

//Cette méthode crée une carte à partir d'une plage d'éléments en fonction des positions de début et de fin indiquées par les multiples pointeurs.

La description de la méthode dans le modèle de classe de carte est indiquée dans le tableau :


fonction illustrer
commencer Retourne un itérateur pointant vers le premier élément de la collection
fin Retourne un itérateur pointant vers le dernier élément de la collection
clair supprimer tous les éléments de la collection
vide Détermine si la collection est vide, si elle est vide retourne true
plage_égale(x) Renvoie deux itérateurs représentant les bornes inférieure et supérieure de x, où la borne inférieure représente le premier élément de la collection avec une valeur égale à x et la borne supérieure représente le premier élément avec une valeur supérieure à x
effacer(je) Supprimez l'élément de collection pointé par l'itérateur ou supprimez l'élément de collection par valeur de clé
effacer(x) supprime l'élément de valeur x de l'ensemble
trouver(x) Retourne un itérateur pointant vers x, si x n'existe pas, l'itérateur retourné est égal à end
limite_inférieure(x) Renvoie un itérateur pointant vers l'élément précédant et immédiatement adjacent à x
taille max Renvoie le plus grand conteneur de la collection
commencer Retourne un itérateur inverse pointant vers le dernier élément de la collection
déchirer Retourne un itérateur inverse pointant vers le premier élément de la collection
taille Renvoie la taille de la collection
échanger() échange le contenu de deux collections
borne_supérieure(x) renvoie un conteneur pointant vers x
value_comp Renvoie un objet de type value_compare, qui est utilisé pour déterminer l'ordre des éléments dans la collection

Par exemple, créez un objet cartographique et ajoutez de nouveaux éléments à l'aide de l'insertion :

#include<iostream>
#include<map>
using namespace std;
int main()
{
	map<int,char> imap;    //创建map映射对象
	imap.insert(map<int,char>::value_type(1,'c'));    //插入新元素(与之前的插入有所不同)
	imap.insert(map<int,char>::value_type(4,'a'));
	imap.insert(map<int,char>::value_type(3,'d'));
	imap.insert(map<int,char>::value_type(15,'f'));
	map<int,char>::iterator it;
	for(it=imap.begin();it!=imap.end();it++)        //循环map映射显示元素值
	{    
		cout<<(*it).first<<"->";
		cout<<(*it).second<<endl;
	}
	return 0;	
} 

 Le résultat de l'opération est le suivant :

On peut voir d'après les résultats en cours d'exécution que le conteneur est trié par le code de récupération précédent plutôt que par les données elles-mêmes, et l'insertion et la sortie de traversée de ce type de modèle sont différentes du modèle précédent, en l'utilisant.first pour représenter le premier Un code de récupération, it.second représente les deuxièmes données, puis l'insertion utilise imap.insert(map<int,char>::value_type()); la différence est que les données value_type sont utilisées.

Notez que ces deux modèles de classe stockent les données de chaîne différemment des autres opérations de modèle de classe. Les opérations spécifiques sont les suivantes :

#include<iostream>
#include<map>
using namespace std;
int main()
{
	map<double,string> mm;
	mm.insert(pair<double,string>(5.24,string("李牧歌")));    //用pair的格式插入数据
	mm.insert(make_pair(3.21,string("侯伊美")));        //使用make_pair存储数据
	mm.insert(make_pair(10.9,string("王润怡")));
	mm.insert(make_pair(9.21,string("王俐元")));
	map<double,string>::iterator it=mm.begin();
	cout<<"mm:"<<endl;
	while(it!=mm.end())
	{
		cout<<"生日"<<it->first<<endl;
		cout<<"姓名"<<it->second<<endl;
		cout<<endl; 
		*it++;	
	}	
	return 0;	
} 

Les résultats de course spécifiques sont les suivants (les âges sont également triés):

 Plus précisément, deux formats sont utilisés pour insérer des données de chaîne, make_pair et pair.Je pense que la première méthode est plus pratique à utiliser. Vous pouvez également affecter mm[1.5]=string("hym) directement sous la forme d'un tableau ; prêtez une attention particulière au fait que l'affectation ici est différente de celle des autres modèles de classe, vous devez donc porter une attention particulière.

conteneur multimap


        Multimap peut stocker un ensemble de valeurs de manière séquentielle. C'est la même chose que map en ce sens que chaque élément peut contenir une valeur clé et des éléments de données associés. Contrairement à map, multimap peut contenir des données répétées, mais il ne peut pas être utilisé [ ] l'opérateur attribue des valeurs à plusieurs éléments.

L'instruction pour construire le modèle de classe multimap est la suivante :

std::multimap<key,type,predicate> name;

        Cette méthode crée un objet multimap vide nommé name qui contient un type de données de type. Cet objet utilise la fonction spécifiée par le prédicat pour ordonner les éléments de la collection. Par exemple, pour créer un objet multicarte vide pour les entiers, vous pouvez écrire :

std::multimap<int,int,std::less<int> > intmap;
//注意《int》后需要敲一个空格

multimap<key,type,predicate> name(mymap);

//Cette méthode utilise le constructeur de copie pour générer un objet multicarte à partir d'une carte mymap existante.

multimap<key,type,predicate> name(first,last);

//Cette méthode crée une carte à partir d'une plage d'éléments en fonction des positions de début et de fin indiquées par les multiples pointeurs.

La plus grande différence entre celui-ci et le modèle de classe de carte est que [] ne peut pas être utilisé pour attribuer des valeurs aux éléments de la collection, et ses éléments de données peuvent apparaître à plusieurs reprises, comme indiqué dans le code suivant :

#include<iostream>
#include<map>
using namespace std;
int main()
{
	multimap<double,char> Cmap;
	Cmap.insert(make_pair(1,'c'));
	Cmap.insert(make_pair(4,'c'));
	Cmap.insert(make_pair(2,'b'));
	Cmap.insert(make_pair(6,'r'));
	Cmap.insert(make_pair(13,'a'));
	cout<<"Cmap :"<<endl;
	map<double,char>::iterator it=Cmap.begin();
	while(it!=Cmap.end())
	{
		cout<<" "<<it->first;
		cout<<" "<<it->second<<endl;
		cout<<endl; 
		*it++;	
	}	
	return 0;	
} 

Vous pouvez également utiliser la méthode pair pour affecter des valeurs, et vous pouvez également utiliser map<int,cahr>::value_type() pour effectuer des opérations d'affectation. Si vous avez des opérations d'affectation pratiques et simples, j'espère que vous pourrez les partager dans le zone de commentaire. Pour ce multimap La méthode use dans le modèle de classe est exactement la même que celle du modèle de classe map, il n'y a donc pas de diagramme de sa méthode use ici, et il suffit de distinguer la différence entre celle-ci et la carte modèle de classe.

        C'est la fin de ce blog. J'ai promis de mettre à jour le blog mercredi, mais j'ai participé à quelques activités et concours scolaires mercredi, donc mercredi était très chargé et je n'ai pas mis à jour le blog. La classe d'aujourd'hui est un peu moins Après avoir écrit le blog, j'espère que vous pourrez lire ces blogs sur la bibliothèque de modèles standard STL, vous pourrez avoir une certaine compréhension de la bibliothèque de modèles standard STL, et si vous êtes intéressé, vous pouvez descendre et réfléchir vous-même au code. Il vaut mieux utiliser son cerveau que de le faire. Le prochain blog devrait porter sur un algorithme de module plus important dans la bibliothèque de modèles STL. Vous pouvez faire attention au contenu de suivi (de toute façon, je ne promets pas de mettre à jour le blog cette fois, et le plus important est de mettre à jour le blog comme vous le souhaitez.) Chaque fois que je peux apprendre quelques petits points de connaissance que je n'ai pas découverts auparavant lorsque je mets à jour un blog. Il se peut que je n'aie pas appris très soigneusement lorsque j'étudiais hahaha, donc nous devons toujours pratiquer et n'imaginez pas, le programme peut s'épuiser et suivre votre imagination, c'est totalement différent.

Je suppose que tu aimes

Origine blog.csdn.net/m0_61886762/article/details/124158923
conseillé
Classement