Vecteur de paires C++

Vecteur De Paires C



En C++, un vecteur est un conteneur polyvalent qui peut se redimensionner dynamiquement, ce qui permet une manipulation efficace des éléments. Alors qu'une paire est un simple conteneur pouvant contenir deux objets hétérogènes, ce qui constitue un moyen pratique d'associer et de gérer les données associées. Lorsque ces paires sont organisées au sein d'un vecteur, les développeurs ont la possibilité de créer des collections dynamiques de paires clé-valeur ou toute autre combinaison de deux éléments distincts.

Cette structure de données est particulièrement utile dans les scénarios où les éléments doivent être stockés sous forme de paires, par exemple lorsqu'il s'agit de paires clé-valeur ou de représentation des relations entre entités. Dans cet article, nous explorerons le concept de vecteur de paires C++ et explorerons les différents exemples pour illustrer ses applications pratiques.







Exemple 1 : Utilisation de base : itération sur un vecteur de paires

Considérons un exemple de base dans lequel nous créons un vecteur de paires qui représentent les noms des étudiants et leurs âges correspondants. Itérer sur un vecteur de paires est similaire à itérer sur un vecteur régulier. On peut utiliser soit les itérateurs, soit des boucles « for » basées sur une plage pour récupérer chaque paire dans le vecteur.



Cet exemple présente la syntaxe d'un « vecteur de paires » dans un contexte significatif.



#include
#include
#include

int main ( ) {

std :: vecteur < std :: paire < std :: chaîne, int >> donnéesétudiantes ;

studentData.push_back ( std :: make_pair ( 'Adam' , vingt ) ) ;
studentData.push_back ( std :: make_pair ( 'Facture' , 22 ) ) ;
studentData.push_back ( std :: make_pair ( 'Charlie' , vingt-et-un ) ) ;

std :: cout << 'Données des étudiants : \n ' ;
pour ( constante automatique & étudiant : studentData ) {
std :: cout << 'Nom: ' << étudiant.premier << ', Âge: ' << étudiant.seconde << std::endl;
}

retour 0 ;
}


Dans cet extrait de code C++, nous commençons par inclure trois fichiers d'en-tête essentiels : « » pour les opérations d'entrée et de sortie, « » pour utiliser le conteneur vectoriel et « » pour accéder au « std : » modèle « paire ». Ces en-têtes nous permettent d'utiliser les fonctionnalités essentielles à notre programme.





À l'avenir, dans la fonction main(), nous déclarons un vecteur nommé « studentData » en utilisant le conteneur « std :: vector ». Ce vecteur est conçu pour stocker les paires où chaque paire encapsule le nom d'un élève (représenté par un « std :: string ») et son âge (un entier « int »). Ensuite, nous remplissons le vecteur « studentData » avec trois paires. À l'aide de la fonction « push_back », des paires sont ajoutées à la fin du vecteur, ajustant dynamiquement sa taille. Une boucle parcourt ensuite « studentData », extrayant et imprimant le nom et l’âge de chaque élève. La sortie affiche « Données étudiantes : » qui met l'accent sur la représentation structurée. Les noms et âges des étudiants sont imprimés séparément, présentant clairement les données stockées.



Exemple 2 : Tri d'un vecteur de paires

Le tri d'un vecteur de paires est une opération courante, en particulier lorsqu'il s'agit d'associations clé-valeur. La fonction « std::sort » de l'en-tête « » peut être utilisée à cet effet. Voyons comment trier un vecteur de paires en fonction du premier et du deuxième éléments :

#include
#include
#include

int main ( ) {

std :: vecteur < std :: paire < std :: chaîne, int >> Info;

info.push_back ( std :: make_pair ( 'Pierre' , quinze ) ) ;
info.push_back ( std :: make_pair ( 'Dora' , 29 ) ) ;
info.push_back ( std :: make_pair ( 'Hanna' , vingt ) ) ;

std :: cout << 'Informations originales : \n ' ;
pour ( constante automatique & entrée : infos ) {
std :: cout << 'Nom: ' << entrée.premier << ', Âge: ' << entrée.seconde << std::endl;
}


std :: trier ( info.begin ( ) , info.fin ( ) ) ;

std :: cout << ' \n Informations triées : \n ' ;
pour ( constante automatique & entrée : infos ) {
std :: cout << 'Âge: ' << entrée.seconde << ', Nom: ' << entrée.premier << std::endl;
}

retour 0 ;
}


Dans cet exemple de code C++, nous travaillons avec un vecteur de paires pour stocker et manipuler les données relatives aux individus, notamment leurs noms et âges. Nous initialisons un vecteur nommé « info des paires » dans la fonction main(). Par la suite, nous remplissons ce vecteur avec trois paires, chacune contenant le nom et l'âge d'une personne distincte, en utilisant la fonction « push_back » et « std :: make_pair » pour une création efficace de paires.

Nous envoyons les « informations originales » sur la console. Cela implique de parcourir le vecteur « info » et d’imprimer les composants de chaque paire. Ensuite, nous utilisons l'algorithme « std :: sort » pour réorganiser le vecteur « info » en fonction de l'opérateur de comparaison par défaut pour les paires qui compare le premier élément de chaque paire (dans ce cas, les noms). Suite à l'opération de tri, nous parcourons à nouveau le vecteur « info » modifié en imprimant les informations triées. Cette fois, le résultat met l’accent sur le classement par âge, illustrant le résultat du processus de tri.

Exemple 3 : Combiner les vecteurs de différents types

Vous pourriez rencontrer des situations dans lesquelles vous devez combiner des informations provenant de deux vecteurs. Un vecteur de paires peut aider à maintenir l’association entre les éléments des deux vecteurs.

#include
#include

int main ( ) {
std :: vecteur < std :: chaîne > villes = { 'New York' , 'Paris' , 'Tokyo' } ;
std :: vecteur < int > populations = { 8175133 , 2140526 , 37435191 } ;

std :: vecteur < std :: paire < std :: chaîne, int >> villePopulationPaires ;

pour ( taille_t je = 0 ; je < std :: min ( villes.size ( ) , populations.taille ( ) ) ; ++je ) {
cityPopulationPairs.push_back ( { villes [ je ] , populations [ je ] } ) ;
}

std :: cout << « Paires ville-population : » << std::endl;
pour ( constante automatique & paire : cityPopulationPairs ) {
std :: cout << 'Ville: ' << paire.premier << ', Population: ' << paire.seconde << std::endl;
}

retour 0 ;
}


Dans la fonction « principale » du code, deux vecteurs sont déclarés : « villes » pour stocker les noms des villes et « populations » pour stocker les valeurs de population correspondantes.

Un troisième vecteur, « cityPopulationPairs », est défini pour stocker les paires de villes et leurs populations respectives. Chaque paire est « std::pair » où « std::string » représente le nom de la ville et « int » représente la population. Nous utilisons ensuite une itération de boucle « for » sur les vecteurs (villes et populations) en utilisant « std :: min » pour garantir que la boucle n'accède pas aux éléments au-delà de la plus petite des deux tailles de vecteur. À l’intérieur de la boucle, des paires d’informations ville-population sont créées et ajoutées au vecteur « cityPopulationPairs ».

Après avoir combiné les informations, une autre boucle « for » est utilisée pour parcourir les paires stockées dans « cityPopulationPairs ». Les données combinées sont ensuite affichées sur la sortie standard en utilisant « std :: cout », représentant clairement chaque ville et sa population correspondante.

Exemple 4 : Recherche des valeurs maximales et minimales

L'identification des valeurs minimales et maximales dans un ensemble de données est une exigence courante dans les opérations algorithmiques et statistiques. Nous pouvons utiliser un vecteur de paires pour suivre les valeurs maximales et minimales dans une séquence :

#include
#include
#include

int main ( ) {
std :: vecteur < int > nombres = { 5 , 12 , 18 , 3 , 7 , 4 , 33 } ;

std :: vecteur < std :: paire < toi, toi >> minMaxPaires ;

std :: trier ( nombres.begin ( ) , chiffres.end ( ) ) ;

minMaxPairs.push_back ( { numéros.front ( ) , chiffres.retour ( ) } ) ;

std :: cout << « Paires Min-Max : » << std::endl;
pour ( constante automatique & paire : minMaxPairs ) {
std :: cout << « Min : » << paire.premier << ', Max : ' << paire.seconde << std::endl;
}

retour 0 ;
}


Le code C++ fourni démontre le processus de recherche des valeurs minimales et maximales dans un vecteur d'entiers, puis de stockage de ces valeurs dans un vecteur de paires. Un vecteur nommé « nombres » est initialement déclaré et initialisé avec un ensemble d'entiers. Pour identifier efficacement les valeurs minimales et maximales dans l'ensemble de données, le programme utilise la fonction « std :: sort » de la bibliothèque d'algorithmes.

Cette fonction vise à organiser les éléments par ordre croissant, simplifiant ainsi le processus d'identification des valeurs minimales et maximales dans l'ensemble de données. L'opération de tri est appliquée au vecteur « nombres » en utilisant Numbers.begin() et Numbers.end() comme paramètres de plage. Suite à l'étape de tri, le programme crée un vecteur de paires, « minMaxPairs », pour stocker les valeurs minimales et maximales calculées. La fonction «push_back» est ensuite utilisée pour ajouter une seule paire contenant les premier (minimum) et dernier (maximum) éléments du vecteur de nombres triés. Enfin, le programme génère le résultat en parcourant le vecteur « minMaxPairs » et en affichant les valeurs minimales et maximales.

Conclusion

En conclusion, le vecteur de paires C++ apparaît comme une structure de données puissante et flexible, ajoutant une couche de polyvalence aux tâches de programmation. Grâce à une exploration détaillée de sa syntaxe et de ses applications pratiques, nous avons vu comment ce conteneur permet d'organiser les associations clé-valeur, de combiner les informations de différents vecteurs et de suivre les valeurs minimales et maximales.