Les Ensembles en C++

Qu'est-ce qu'un ensemble ?

Les ensembles sont des conteneurs associatifs qui enregistrent des éléments uniques. Contrairement à d'autres structures de données, ils permettent d'accéder aux éléments via leur valeur, qui agit également comme clé d'accès. Cette valeur est immuable : une fois qu'elle est assignée, elle ne peut plus être modifiée. Néanmoins, il est possible d'ajouter de nouveaux éléments ou d'en supprimer des existants.

Syntaxe de base

Pour créer un ensemble en C++, utilisez la syntaxe suivante :

std::set setName;

Il vous suffit d'utiliser le mot clé set suivi du type de données et d'un nom pour créer un ensemble.

Exemple d'utilisation

Dans l'exemple suivant, nous allons initialiser un ensemble, y insérer des valeurs à l'aide de la méthode .insert(), puis afficher les valeurs de l'ensemble :

#include 
#include 

int main() {
    // Initialiser l'ensemble
    std::set numSet;
    // Insérer des valeurs dans l'ensemble
    numSet.insert(25);
    numSet.insert(42);
    numSet.insert(10);
    numSet.insert(19);
    // Afficher l'ensemble
    std::set::iterator iter;
    for (iter = numSet.begin(); iter != numSet.end(); iter++) {
        std::cout << *iter << " ";
    }
}

Cet exemple produira la sortie suivante :

10 19 25 42

Notez que, par défaut, les valeurs dans un ensemble sont triées par ordre croissant.

Changer la fonction de comparaison

Il est possible de modifier la fonction de comparaison par défaut pour trier les valeurs en ordre décroissant. Pour cela, utilisez la syntaxe suivante :

std::set> setName;

Assurez-vous que le type de données pour la fonction de comparaison concorde avec le type de l'ensemble.

Exemple de comparaison différente

L’exemple précédent peut être ajusté pour trier en ordre décroissant grâce à ce code :

#include 
#include 
#include 

int main() {
    // Initialiser l'ensemble avec un tri décroissant
    std::set> numSet;
    numSet.insert(25);
    numSet.insert(42);
    numSet.insert(10);
    numSet.insert(19);
    // Afficher l'ensemble
    std::set::iterator iter;
    for (iter = numSet.begin(); iter != numSet.end(); iter++) {
        std::cout << *iter << " ";
    }
}

Cela affichera :

42 25 19 10