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++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Novembre 2006
    Messages
    422
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 422
    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
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    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 éclairé
    Inscrit en
    Novembre 2006
    Messages
    422
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 422
    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
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    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 éclairé
    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
    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 éprouvé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 126
    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.

  7. #7
    Membre éclairé
    Inscrit en
    Novembre 2006
    Messages
    422
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 422
    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