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 :

comparaison avec état pour une set


Sujet :

SL & STL C++

  1. #1
    Futur Membre du Club
    Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2009
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

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

    Informations forums :
    Inscription : Octobre 2009
    Messages : 7
    Points : 7
    Points
    7
    Par défaut comparaison avec état pour une set
    Bonjour,
    Je voudrais créer un container de type STL set avec une particularité:
    la fonction de comparaison fait référence à une variable privée représentant un état interne. Pour simplifier au maximum, il s'agit d'un set de doubles, mais la comparaison entre deux doubles n'est pas celle par défaut, mais dépend d'une "origine" (qui est paramétrable) et qui intervient comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    bool less_than(double d1, double d2){
    return fabs(d1 -_origine)< fabs(d2 - _origine);
    }
    Je sais qu'on peut se créer une classe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    class origin_comp{
    public:
      origin_comp(double o):_origine(o){}
      bool operator()(double d1, double d2){return fabs(d1 -_origine)< fabs(d2 - _origine);
    private:
     double _origine;
    };
    mais je ne sais pas exploiter cette classe pour la création de mon ensemble
    car mon compilateur rejette
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    origin_comp oc(1.0);
    set<double, oc1>s1;
    merci de votre attention

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 69
    Points : 142
    Points
    142
    Par défaut
    Euh, j'ai l'impression que t'essaies de créer un set en lui passant une instance de la classe : ton oc1 (qui doit être une typo, d'ailleurs, non ? Ça doit être oc...BOn de toute façon c'est faux quand même).

    C'est un template, il faut donc lui passer la classe elle-même.

    Soit plutôt :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    set<double, origin_comp> s1;
    Tu peux aussi utiliser un pointeur de fonction plutôt qu'une classe, mais dans ce cas-là je pense que tu devras sortir ta fonction de comparaison de la classe.

  3. #3
    Futur Membre du Club
    Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2009
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

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

    Informations forums :
    Inscription : Octobre 2009
    Messages : 7
    Points : 7
    Points
    7
    Par défaut Pointeur de fonction
    Ah, si je peux utiliser un pointeur de fonction je suis sauvé.
    Je vais essayer...

  4. #4
    Membre émérite

    Inscrit en
    Mai 2008
    Messages
    1 014
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 1 014
    Points : 2 252
    Points
    2 252
    Par défaut
    Citation Envoyé par feraudyh Voir le message
    Ah, si je peux utiliser un pointeur de fonction je suis sauvé.
    Pourquoi ?
    Tu as dit qu'il te fallait un état interne, donc c'est plus naturel d'avoir une fonction-objet. C'est presque la définition d'ailleurs, fonction-objet = fonction + état.
    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 origin_comp{
    public:
      origin_comp(double o):_origine(o){}
      bool operator()(double d1, double d2){return fabs(d1 -_origine)< fabs(d2 - _origine);}
    private:
     double _origine;
    };
     
    int main()
    {
       double origin = 4.0;
       origin_comp oc(origin );
       std::set<double, origin_comp> s(oc);
    }

  5. #5
    Futur Membre du Club
    Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2009
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

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

    Informations forums :
    Inscription : Octobre 2009
    Messages : 7
    Points : 7
    Points
    7
    Par défaut Encore mieux!
    Si c'est aussi facile comme çà de passer le comparateur je n'ai pas besoin de chercher plus loin!

  6. #6
    Futur Membre du Club
    Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2009
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

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

    Informations forums :
    Inscription : Octobre 2009
    Messages : 7
    Points : 7
    Points
    7
    Par défaut Probleme résolu
    Merci Arzar, j'ai la réponse à mon problème et j'ai testé.

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

Discussions similaires

  1. [JPA]Relation avec @JoinColumn pour une cle compose
    Par seddik_saber dans le forum JPA
    Réponses: 1
    Dernier message: 27/02/2008, 09h13
  2. Réponses: 3
    Dernier message: 16/01/2008, 08h32
  3. Réponses: 6
    Dernier message: 11/09/2007, 18h17
  4. Réponses: 6
    Dernier message: 03/05/2007, 11h28
  5. Count de variable avec separateur pour une meme ligne
    Par snanot dans le forum Langage SQL
    Réponses: 8
    Dernier message: 19/02/2007, 17h11

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