Méthode de tri personnalisée pour le modèle pair de la bibliothèque standard C++ (STL)

C++C++Beginner
Pratiquer maintenant

💡 Ce tutoriel est traduit par l'IA à partir de la version anglaise. Pour voir la version originale, vous pouvez cliquer ici

Introduction

Dans ce laboratoire, vous allez apprendre à créer une méthode de tri personnalisée pour un modèle de paire et à l'implémenter à l'aide d'un vecteur en langage de programmation C++. Ce laboratoire suppose que vous avez des connaissances préalables des bases de la programmation C++ et du concept de modèle de paire. Si vous êtes nouveau dans ces sujets, il est recommandé de suivre les tutoriels correspondants avant de continuer.

Créer un vecteur vide et le remplir d'éléments

Nous allons commencer par déclarer un vecteur vide de paires puis le remplir avec quelques éléments.
Dans cette étape, nous allons créer un vecteur vide.

#include <iostream>
#include <bits/stdc++.h>

using namespace std;

int main() {
  vector<pair<int, int>> v;

  return 0;
}

Dans ce bloc de code, nous avons juste inclus les fichiers d'en-tête requis et déclaré un vecteur vide de paires.

Remplir le vecteur d'éléments

Après avoir créé un vecteur vide, nous pouvons y ajouter des éléments. Nous allons ajouter des éléments en utilisant la méthode push_back de la classe vecteur. Dans ce cas, nous ajoutons des paires d'entiers au vecteur.

int main() {
  vector<pair<int, int>> v;
  v.push_back(make_pair(1, 5));
  v.push_back(make_pair(1, 3));
  v.push_back(make_pair(2, 6));
  v.push_back(make_pair(2, 4));
  v.push_back(make_pair(5, 24));

  return 0;
}

Dans ce bloc de code, nous ajoutons 5 paires au vecteur v.

Créer une méthode de tri personnalisée

Pour créer une méthode de tri personnalisée, nous devons tout d'abord définir une fonction de comparaison. La fonction de comparaison comparera deux paires et renverra une valeur booléenne indiquant si la première paire est inférieure à la seconde paire. Dans ce cas, nous comparerons le premier élément de chaque paire, et si ils sont égaux, nous comparerons les seconds éléments des paires.

bool cmp(pair<int, int> x, pair<int, int> y)
{
    if (x.first!= y.first)
        return x.first < y.first;
    else
        return x.second < y.second;
}

Dans ce bloc de code, nous avons créé une fonction de comparaison qui prend deux paires d'entiers en arguments et renvoie une valeur booléenne selon nos conditions spécifiées. La fonction compare tout d'abord le premier élément de chaque paire. Si ils ne sont pas égaux, la fonction renvoie le résultat de la comparaison. Si ils sont égaux, la fonction compare le second élément de la paire et renvoie le résultat de la comparaison.

Utiliser sort pour trier le vecteur

Dans cette étape, nous allons trier les éléments du vecteur selon la méthode de tri personnalisée que nous avons créée dans l'étape précédente. Pour trier le vecteur, nous devons appeler la méthode sort de la bibliothèque standard C++ (STL) en lui passant le vecteur comme argument et en lui passant la méthode de tri personnalisée comme troisième argument.

int main() {
  vector<pair<int, int>> v;
  v.push_back(make_pair(1, 5));
  v.push_back(make_pair(1, 3));
  v.push_back(make_pair(2, 6));
  v.push_back(make_pair(2, 4));
  v.push_back(make_pair(5, 24));


  sort(v.begin(), v.end(), cmp);

  return 0;
}

Dans ce bloc de code, nous avons trié le vecteur v en utilisant la méthode sort de la STL. Nous avons passé la méthode de tri personnalisée cmp comme troisième paramètre.

Afficher le vecteur trié

Dans cette étape, nous allons afficher les éléments du vecteur trié. Nous allons parcourir le vecteur à l'aide d'une boucle for et afficher le premier et le second élément de chaque paire.

int main() {
  // code précédent

  for (auto p : v)
  {
      cout << p.first << " " << p.second << endl;
  }
  return 0;
}

Dans ce dernier bloc de code, nous avons utilisé une boucle for-each pour accéder aux paires dans le vecteur et les afficher dans la console. Maintenant, exécutons le code pour voir les résultats.

Exécuter le code

Pour exécuter le code, vous devez le compiler à l'aide de la commande suivante :

g++ ~/project/main.cpp -o main &&./main

Après avoir exécuté le code, vous verrez les paires triées imprimées dans l'ordre croissant.

Exemple de code complet

#include <iostream>
#include <bits/stdc++.h>

using namespace std;

bool cmp(pair<int, int> x, pair<int, int> y)
{
    if (x.first!= y.first)
        return x.first < y.first;
    else
        return x.second < y.second;
}

int main() {
    vector<pair<int, int>> v;
    v.push_back(make_pair(1, 5));
    v.push_back(make_pair(1, 3));
    v.push_back(make_pair(2, 6));
    v.push_back(make_pair(2, 4));
    v.push_back(make_pair(5, 24));

    sort(v.begin(), v.end(), cmp);

    for (auto p : v)
    {
        cout << p.first << " " << p.second << endl;
    }
    return 0;
}

Récapitulatif

Dans ce laboratoire, nous avons appris à créer une méthode de tri personnalisée pour un modèle de paire et à l'implémenter à l'aide d'un vecteur en C++. Nous avons créé un vecteur vide, ajouté des éléments à celui-ci, créé une fonction de comparaison, utilisé la fonction sort pour trier les éléments du vecteur à l'aide de notre méthode de tri personnalisée, et imprimé le vecteur trié. La méthode de tri personnalisée peut être utilisée pour trier les paires dans le vecteur selon certaines exigences ou conditions spécifiques que nous définissons dans le code.