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 :

std::set : Comparateur pour des arêtes


Sujet :

C++

  1. #1
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2010
    Messages
    517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2010
    Messages : 517
    Points : 718
    Points
    718
    Par défaut std::set : Comparateur pour des arêtes
    Bonjour tout le monde,

    J'ai souhaiterais avoir un std::set d'arêtes imposant l'unicité de celles ci. Je peux pas utiliser de pointeur dans ce cas de figure car je génère à la volée de nouvelles (ou non) arêtes.

    Voici le squelette de ma classe arête:
    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
    class Edge
    {
    public:
      Edge(const std::shared_ptr<POINT> & p1, const std::shared_ptr<POINT> & p2) :
          m_p1(p1), m_p2(p2)
      {
      }
      virtual ~Edge()
      {
      }
     
      const std::shared_ptr<POINT> & p1() const
      {
        return m_p1;
      }
     
      const std::shared_ptr<POINT> & p2() const
      {
        return m_p2;
      }
    private:
      std::shared_ptr<POINT> m_p1, m_p2;
    };
    J'ai essayé de faire un comparateur mais il ne fonctionne pas correctement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    struct EdgeCompare
    {
      bool operator()(const Edge & e1, const Edge & e2) const
      {
        return e1.p1() < e2.p1() || e1.p2() < e2.p2();
      }
    };
    Mon but est de pouvoir supprimer une arête si celle-ci (ou son inverse) est déjà présente.

    Ou est-ce que je me suis trompé?

    Merci

  2. #2
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Points : 16 213
    Points
    16 213
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  3. #3
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2010
    Messages
    517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2010
    Messages : 517
    Points : 718
    Points
    718
    Par défaut
    Merci beaucoup!

    Effectivement, je n'avais pas pris en compte le cas où e2.p1() et supérieur à e1.p1():

    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
    struct EdgeCompare
    {
      bool operator()(const Edge & e1, const Edge & e2) const
      {
           if (e1.p1() < e2.p1())
          {
            return true;
          }
          else if (e2.p1() < e1.p1())
          {
            return false;
          }
          else
          {
            return e1.p2() < e2.p2();
          }
      }
    };

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

Discussions similaires

  1. [Logiciel]Cherche graphisme pour des interfaces visuelles
    Par smyley dans le forum Autres Logiciels
    Réponses: 9
    Dernier message: 14/11/2004, 02h13
  2. Sets, comparateurs et modification de "clé"
    Par Gruik dans le forum SL & STL
    Réponses: 4
    Dernier message: 24/09/2004, 15h54
  3. package ambiguïté pour des classes de même nom
    Par soad dans le forum Langage
    Réponses: 2
    Dernier message: 10/06/2004, 19h25
  4. Recherche "étoilée" avec std::set
    Par guejo dans le forum MFC
    Réponses: 2
    Dernier message: 06/05/2004, 13h28
  5. STL : std::set problème avec insert ...
    Par Big K. dans le forum MFC
    Réponses: 13
    Dernier message: 08/11/2003, 01h02

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