IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C++ Discussion :

typedef set : deux arguments!


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 27
    Par défaut typedef set : deux arguments!
    bonjour,

    je suis novice en C++..en lisant un code j'ai trouvé une structure de vecteur que j'ai pas compris..j'ai regardé dans quelques manuel mais j'ai pas trop compris ce que cela veut dire..
    voila le code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    class ref { 
     
      struct RefCmp
      {
        bool operator()(int entier1, int entier2) const
        {
          return entier1 <= entier2 ;
        }
      };
     
     
    public:     
     
      typedef  set<int,RefCmp>               File;
    dans la définition de set File, on a utilisé deux arguments, le premier c'est le type des elements du tableau, et le deuxième argument, je sais pas à quoi ça sert..

    merci d'avance...

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 147
    Billets dans le blog
    4
    Par défaut
    Bonjour,

    le 1° argument est bien le type qu'on va mettre dans son set.
    Le 2° argument est le foncteur utilisé pour la comparaison des éléments, qui servira à leur ordonnance.

    http://www.cplusplus.com/reference/stl/set/
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  3. #3
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Salut,

    Pour être tout à fait complet:

    Bien que l'on utilise souvent (irait on jusqu'à dire "le plus souvent" ) les collections de la STL sous leur forme "simple", à savoir en n'indiquant que le type des éléments qu'elles doivent contenir, il faut savoir que l'on peut préciser un tas de choses qui font partie des politiques mises en oeuvre pour la gestion de ces collections.

    Le std::set ne fait pas exception à la règle et le deuxième paramiètre que l'on peut lui donner correspond au prédicat à utiliser pour le tri.

    Par défaut, le prédicat utilisé est std::less, qui va utiliser l'opérateur < pour comparer deux objets, mais, il arrive qu'il n'y ait pas de sens à créer un opérateur < pour un type donné.

    Dans ce cas, toute tentative d'utiliser std::set se solderait par une erreur de compilation proche de "erreur : il n'y a pas d'opérateur < pour le type XXX"

    L'idée est donc de fournir un foncteur qui va se charger de comparer deux éléments et de renvoyer vrai si le premier peut, effectivement, être considéré comme "plus petit" que le deuxième.

    Au passage, le code que tu fournis est faux (à corriger, sans doute, dans le code dont tu l'as tiré, si c'est un code de prod ): il doit renvoyer vrai dans le cas d'une infériorité stricte (et donc renvoyer faux en cas d'égalité ), car c'est cette meme comparaison qui permet de retrouver un élément donné par "équivalence" : si l'élément en cours n'est pas plus petit que l'élément de rérérence et que l'élément de référence n'est pas plus petit que l'élément en cours, alors, c'est que l'élément de référence et l'élément en cours ne font qu'un

    tu ne devrais donc pas avoir
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
      struct RefCmp
      {
        bool operator()(int entier1, int entier2) const
        {
          return entier1 <= entier2 ;
        }
      };
    mais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
      struct RefCmp
      {
        bool operator()(int entier1, int entier2) const
        {
          return entier1 < entier2 ;
        }
      };
    Une fois ce foncteur défini, on peut indiquer à std::set d'utiliser ce foncteur pour le tri et la recherche en le fournissant en tant que deuxième type dans la déclaration de set
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Excel] Forme conditionnelle à deux arguments
    Par Dark-Lab dans le forum Excel
    Réponses: 1
    Dernier message: 15/08/2007, 15h22
  2. [MySQL] Faire un tri sur un des deux arguments d'un SET
    Par mathieugamin dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 23/11/2006, 16h52
  3. Réponses: 24
    Dernier message: 20/08/2006, 14h08
  4. Méthode retournant deux arguments
    Par Anabel dans le forum Langage
    Réponses: 4
    Dernier message: 30/05/2006, 16h34
  5. fonction à deux arguments
    Par bobic dans le forum ASP
    Réponses: 3
    Dernier message: 26/04/2006, 22h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo