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

SL & STL C++ Discussion :

STL, set


Sujet :

SL & STL C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 74
    Par défaut STL, set
    Bonjour j'ai un probleme avec des insertions dans un set, voici quelques lignes du fichier .h
    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    struct EtiqSommet {
        PairString pairEtiqVal;
        int idSommet;
    };
     
    /**
     *  \brief Classe de comparaison des elements EtiqSommet
     */
    class EtiqSommetLess : public binary_function<EtiqSommet,EtiqSommet, bool>{
    public:
        bool operator()(const EtiqSommet &e1, const EtiqSommet &e2){
     
            return (e1.idSommet<=e2.idSommet);
        }
    };
     
    /**
     *  \brief Classe de comparaison des elements EtiqArc
     */
    class EtiqArcLess : public binary_function<EtiqArc,EtiqArc, bool>{
    public:
        bool operator()(const EtiqArc &e1, const EtiqArc &e2){
     
            return (e1.pairIdSommet<e2.pairIdSommet);                                                  
        }
    };
     
    /**
     *  \brief ensemble qui stocke les elements (v,l) de  descr(g1) inter descr(g2)
     *  redefinition de la fonction de comparaison "less" par defaut avec un foncteur
     *  EtiqSommetLess (comparer deux structures EtiqSommet)
     */ 
    typedef std::set<EtiqSommet,EtiqSommetLess> SetEtiqSommet;
    typedef SetEtiqSommet::iterator SetEtiqSommetIt;
     
    /**
     *  \brief ensemble qui stocke les elements (vi,vj,l) de  descr(g1) inter descr(g2)
     *  redefinition de la fonction de comparaison "less" par defaut avec un foncteur
     *  EtiqArcLess (comparer deux structures EtiqArc)    
     */ 
    typedef std::set<EtiqArc,EtiqArcLess> SetEtiqArc;
    typedef SetEtiqArc::iterator SetEtiqArcIt;
    et ici les lignes de code implementant l'insertion :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    simGraph.setElemIntersecArcG1.insert(SetEtiqArc::value_type(elemIntersecArc));
    De ce que j'ai compris des documentations en ligne, il definit un foncteur de comparaison EtiqSommetLess et EtiqArcLess.
    Ensuite ce foncteur est appele par methode insert() du set, ce qui en theorie specifie comment inserer les objets car c'est le foncteur qui indique si l'element existe deja ds le set. Est-ce bien ca ?

    setElemIntersecArc est un set de (EtiqArc arc, int idSommet).

    En fait, lorsqu'il declare set<EtiqMachin, EtiqMachinLess> monSet; le 2e parametre correspond a la fonction de comparaison qui est appele au sein de l'insert pour gerer les doublons ds le set ?

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Ensuite ce foncteur est appele par methode insert() du set, ce qui en theorie specifie comment inserer les objets car c'est le foncteur qui indique si l'element existe deja ds le set. Est-ce bien ca ?
    Oui.

    En fait, lorsqu'il declare set<EtiqMachin, EtiqMachinLess> monSet; le 2e parametre correspond a la fonction de comparaison qui est appele au sein de l'insert pour gerer les doublons ds le set ?
    Oui.

    Attention cependant, le foncteur (ou la fonction de comparaison) ne sert pas à gérer les doublons : elle sert à gérer l'ordre dans le conteneur. Donc par extension les doublons, mais pas seulement. En l'occurence ton premier foncteur à base de <= est buggé, il faut un ordre strict (<).

    PS : plutôt que de dupliquer ton message pour ajouter une ligne, la prochaine fois pense à éditer celui-ci

Discussions similaires

  1. Problème conversion de conteneur stl set
    Par antoine2210 dans le forum Langage
    Réponses: 2
    Dernier message: 03/01/2014, 00h39
  2. Bug dans un wrapper de la classe STL set
    Par sphere369 dans le forum Débuter
    Réponses: 6
    Dernier message: 17/07/2009, 15h18
  3. STL set et fonction membre du conteneur
    Par bobyjoe dans le forum SL & STL
    Réponses: 4
    Dernier message: 29/06/2007, 13h23
  4. [STL] set::find !
    Par ZaaN dans le forum SL & STL
    Réponses: 5
    Dernier message: 21/06/2007, 09h31
  5. STL set et type complex
    Par jguillot dans le forum SL & STL
    Réponses: 20
    Dernier message: 13/11/2006, 22h14

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