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 :

surcharge des operateur du conteneur set


Sujet :

C++

  1. #1
    Membre régulier
    Inscrit en
    Novembre 2006
    Messages
    422
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 422
    Points : 113
    Points
    113
    Par défaut surcharge des operateur du conteneur set
    Salut,
    C'est la première fois que j'essaie d'utiliser une classe non native avec un conteneur stl et j'ai pas reussi a compiler (vu que j'ai pas surcharger les operateurs de la classe set ).
    Voila ma classe:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    class mot_cle
    {
        public:
            string mot;
            int occ;
     
            mot_cle();
            mot_cle(string _mot,int _occ);
            ~mot_cle();
    ....
    };
    Pouvez vous m'indiquez comment procéder svp ?
    Merci d'avance.

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Qu'appelles-tu exactement une classe non-native ?

    Et quelles erreurs as-tu exactement ? Et pourquoi nous parles-tu de set, en fait?
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre régulier
    Inscrit en
    Novembre 2006
    Messages
    422
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 422
    Points : 113
    Points
    113
    Par défaut
    euh je crois que je me suis planté en utilisant ce terme je voulais dire un type prédéfini .
    bref lorsque je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    set<mot_cle> test;
    mot_cle mot("lolo",2);
    test.insert(mot);
    j'ai cette erreur sous code::blocks 8.04:
    no match for operator <

  4. #4
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Les set sont triés, il te faut donc surcharger l'opérateur < pour ta classe.

    En gros, tu dois définir comment on détermine qu'un objet de ta classe est "inférieur" à un autre, pour le tri.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Membre actif
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 487
    Points : 294
    Points
    294
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    Les set sont triés, il te faut donc surcharger l'opérateur < pour ta classe.

    En gros, tu dois définir comment on détermine qu'un objet de ta classe est "inférieur" à un autre, pour le tri.
    Est-ce que set est une fonction prédéfinie en C++ ?

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 126
    Points : 149
    Points
    149
    Par défaut
    Bonjour,

    Soit ajouter une surcharge de l'opérateur de comparaison, soit ajouter une fonction de comparaison de clé (voir ci-dessous) :

    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
    class mot_cle 
    {
        public:
            std::string mot;
            int occ;
     
            mot_cle();
            mot_cle(std::string _mot,int _occ)
            {
                mot = _mot;
                occ = _occ;
            };
    };
     
    struct comp
    {
      bool operator()(mot_cle  m1, mot_cle  m2) const
      {
        return strcmp(m1.mot.c_str(), m2.mot.c_str()) < 0;
      }
    };
     
    int main(void)
    {
        std::set<mot_cle, comp> test;
        mot_cle mot("lolo",2);
        test.insert(mot);
    }
    Bonne journée,
    Agamitsudo.
    Un ordinateur fait au bas mot 1 million d'opérations à la seconde, mais il n'a que ça à penser, aussi. (brèves de comptoirs, JM.Gourio)


  7. #7
    Membre régulier
    Inscrit en
    Novembre 2006
    Messages
    422
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 422
    Points : 113
    Points
    113
    Par défaut
    dot-_-net>le set est un conteneur.
    medianoc> je lui donne quoi comme signature ?
    édit: j'ai trouvé en jetant un coup d'oeil a mon vieux cours .
    je laisse ouvert ou cas ou j'aurais d'autres questions.

Discussions similaires

  1. Réponses: 6
    Dernier message: 22/06/2012, 17h09
  2. surcharge des operateurs "?"
    Par qsdwxc9 dans le forum C++
    Réponses: 1
    Dernier message: 09/03/2010, 12h39
  3. [debutant] question sur la surcharge des operateurs
    Par hunter99 dans le forum Débuter
    Réponses: 17
    Dernier message: 04/01/2008, 18h26
  4. Surcharge des operateur de flux
    Par pit88 dans le forum C++
    Réponses: 1
    Dernier message: 25/04/2007, 10h31
  5. surcharge des operateurs de flux
    Par icer dans le forum C++
    Réponses: 6
    Dernier message: 22/02/2006, 09h02

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