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 :

Tri du set pour une POD structure


Sujet :

SL & STL C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Avatar de NiamorH
    Inscrit en
    Juin 2002
    Messages
    1 309
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 1 309
    Par défaut Tri du set pour une POD structure
    Bonjour,

    Le conteneur <set> de la stl permet de collecter une liste d'objets uniques triée.

    Lorsque je créé une structure contenant un string, un double, un autre string etc... quel critère est utilisé pour trier mes objets dans le set ? Je n'ai pas défini d'oprateur particulier de comparaison pour ma structure mais ça compile quand même ...

  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 : 50
    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
    Par défaut
    Il n'y a pas de critère défini par défaut.

    Si ton code compile, c'est sans doute probablement parce que tu n'as pas utilisée encore ton set. Actuellement, le code suivant compile :

    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
    #include <set>
     
    using namespace std;
     
    class A
    {
    	int i;
    };
     
     
    int main()
    {
    	set<A> s;
    	A a;
    	//s.insert(a);
        return 0;
    }
    Mais dès qu'on enlève les commentaires, il cessera de compiler. Les templates ne sont compilés que lorsqu'on en a besoin, et dans mon exemple, avant que l'on veuille insérer un élément dans un set, l'opérateur< n'étais pas requis.

    A noter que dans une prochaine version de le norme, ce genre d'erreur sera probablement détecté plus tôt (et avec de meilleurs messages) grâce aux concepts.
    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 éprouvé
    Avatar de NiamorH
    Inscrit en
    Juin 2002
    Messages
    1 309
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 1 309
    Par défaut
    Je viens de m'apercevoir d'une chose que j'avais totalement zappé :

    Je n'ai pas un set d'objets A mais plutôt de pointeurs vers des objets A.

    Et j'ai bien des insertions déjà.

    J'imagine que le tri de pointeurs vers n'importe quoi est une chose que le compilo arrive à gérer, mais à mon avis pas du tout comme je l'attends.

    Je devrais pouvoir tenter de redéfinir l'opérateur < pour les pointeurs vers mon objet A, je vais faire le test.

  4. #4
    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 : 50
    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
    Par défaut
    Citation Envoyé par NiamorH Voir le message
    J'imagine que le tri de pointeurs vers n'importe quoi est une chose que le compilo arrive à gérer, mais à mon avis pas du tout comme je l'attends.
    Il trie donc tes objets selon l'ordre dans lequel ils apparaissent en mémoire...
    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.

  5. #5
    Membre éprouvé
    Avatar de NiamorH
    Inscrit en
    Juin 2002
    Messages
    1 309
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 1 309
    Par défaut
    Tout à fait.

    Mais je suis un peu bloqué... :

    Citation Envoyé par msdn
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    // C2803.cpp
    // compile with: /c
    class A{};
    bool operator< (const A *left, const A *right);   // C2803
    // try the following line instead
    // bool operator< (const A& left, const A& right);
    Impossible de redéfinir le comportement de comparaison de pointeurs vers mes objets.
    Et ça me gène de devoit faire mon set sur des données non pointeurs. La solution que je vois pour éviter de faire des copies de ma structure, c'est d'utiliser un objet rien que pour encapsuler un pointeur vers ma structure... Pas très beau. Y a-t-il d'autres possibilités ?

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    92
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France, Côte d'Or (Bourgogne)

    Informations forums :
    Inscription : Mai 2005
    Messages : 92
    Par défaut
    Donner un foncteur de comparaison en deuxième argument template de set?

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

Discussions similaires

  1. un modèle à suivre pour une analyse structurée
    Par yaciin dans le forum Général Conception Web
    Réponses: 0
    Dernier message: 14/05/2014, 10h06
  2. Pb avec un SET pour une variable DATETIME
    Par tibofo dans le forum Développement
    Réponses: 7
    Dernier message: 24/05/2011, 08h32
  3. Choix d'un ERP pour une petite structure
    Par Enhide dans le forum Forum général ERP
    Réponses: 5
    Dernier message: 27/04/2011, 18h56
  4. Réponses: 3
    Dernier message: 13/04/2006, 18h04
  5. Réponses: 1
    Dernier message: 09/02/2006, 11h03

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