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 :

Conteneur set et égalité de classe


Sujet :

SL & STL C++

  1. #1
    Membre régulier
    Inscrit en
    Mai 2006
    Messages
    330
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 330
    Points : 85
    Points
    85
    Par défaut Conteneur set et égalité de classe
    Salut,

    J'ai une collection d'instances d'une classe produites "au fil de l'eau", au fur et à mesure de leur production je veux éliminer les doublons. Mon idée (peut-être pas la meilleure) est construire un "set" des instances (ou des pointeurs d'instance) qui s'occuperait tout seul d'assurer l'unicité.
    Je voudrais savoir quels opérateurs il est nécessaire de définir sur la classe en question pour que ça marche.

    Merci

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 764
    Points : 2 705
    Points
    2 705
    Par défaut
    Y'a un ensemble de règles à respecter. Je ne me souviens plus desquelles, si ce n'est que la classe doit être copiable sans que cela modifie la source (c'est pour cela qu'on ne peut utiliser d'auto_ptr).

    Tu peux donc déjà travailler sur ce point avant que d'autres nous fassent part de leur savoir. :-)

  3. #3
    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
    Par défaut
    set est avant tout un conteneur trié. Il faut donc définir un moyen de comparer deux objets, et que cette comparaison ait un sens (des contraintes genre si a<b, alors b<a est faux...). Je n'ai hélas pas (encore) d'article de faq à pointer qui détaille ça.
    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.

  4. #4
    Membre régulier
    Inscrit en
    Mai 2006
    Messages
    330
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 330
    Points : 85
    Points
    85
    Par défaut
    C'est vrai que dans mon cas le tri n'a pas vraiment de sens... Je suis preneur de toute solution plus efficace que de comparer une nouvelle instance à toutes celles qui l'ont précédé.

  5. #5
    Membre émérite
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 764
    Points : 2 705
    Points
    2 705
    Par défaut
    Citation Envoyé par JolyLoic Voir le message
    Je n'ai hélas pas (encore) d'article de faq à pointer qui détaille ça.
    Si tu as à disposition ce livre, il fait une liste de tous les prérequis.
    A reprendre dans la FAQ, éventuellement...

  6. #6
    Membre émérite
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 764
    Points : 2 705
    Points
    2 705
    Par défaut
    Citation Envoyé par tnarol Voir le message
    C'est vrai que dans mon cas le tri n'a pas vraiment de sens... Je suis preneur de toute solution plus efficace que de comparer une nouvelle instance à toutes celles qui l'ont précédé.
    Regarde la FAQ sur la STL.
    Tu constateras que les seules structures vérifiant l'unicité sont des structures ordonnées.

    Ou alors, il faut piocher en dehors de la STL...

  7. #7
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Il faut introduire un ordre, mais il peut etre arbitraire tant qu'il est coherent. Les conditions a respecter (outre qu'il ne faut pas modifier le resultat des comparaisons dans le temps)
    * !Comp(a, a);
    * Comp(a, b) && Comp(b,c) implique Comp(a, c)
    * !Comp(a, b) && !Comp(b, a) && !Comp(a, c) && !Comp(c, a)
    implique que !Comp(b, c) && !Comp(c, b)
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

Discussions similaires

  1. [VS2008] Settings.settings et bibliothèque de classe
    Par dkmix dans le forum Visual Studio
    Réponses: 0
    Dernier message: 09/03/2011, 10h01
  2. Pb avec le conteneur set
    Par ilyes_ka dans le forum SL & STL
    Réponses: 13
    Dernier message: 02/04/2009, 11h26
  3. Utilisation d'un conteneur membre d'une autre classe
    Par oodini dans le forum SL & STL
    Réponses: 2
    Dernier message: 22/10/2008, 18h45
  4. surcharge des operateur du conteneur set
    Par isoman dans le forum C++
    Réponses: 6
    Dernier message: 10/07/2008, 15h41
  5. [Débutant - STL] Conteneur set
    Par @r$£~%[ dans le forum SL & STL
    Réponses: 4
    Dernier message: 11/08/2005, 22h43

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