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 :

amelioration de code


Sujet :

C++

  1. #1
    Débutant  
    Inscrit en
    Novembre 2006
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 073
    Points : 217
    Points
    217
    Par défaut amelioration de code
    Voici le code suivant.
    La fonction ajout sert a ajouter a sa bonne place un entier dans une liste ordonnée d'entier.
    Il y a pas grand chose, mais je vous remercie si vous pouvez améliorer la syntaxe.

    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
     
     
    typedef multimap<double, int > listes;
     
    void ajout(listes &m,int a){
     listes::iterator p;
     p=m.lower_bound(1);
     while (p->second<a){
     
        p++;}
     
     m.insert(p,listes::value_type(1,a));
    }
     
     
    int main(){
          listes m;listes::iterator p;
         m.insert(listes::value_type(1,8)); m.insert(listes::value_type(1,13)); m.insert(listes::value_type(1,20));
        int a=15;
    ajout(m,a);
     
    }
     
    en l'occurrence, c'est l'entier 15 qu'il ajoute

  2. #2
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Pourquoi ne pas faire une insertion directement ? Quel est l'intérêt de l'itérateur ??

  3. #3
    Débutant  
    Inscrit en
    Novembre 2006
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 073
    Points : 217
    Points
    217
    Par défaut
    mais comment tu lui demande de faire une insertion a la bonne place?
    disons qu'ici les données sont comparables, mais si les données n'étaient pas comparables, et que tu voulais inserer une donnée à la nièeme place, comment ferais tu?

  4. #4
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Une multimap, c'est toujours classé... Mais c'est vrai que chez toi, ça ne sert à rien puisque l'index vaut toujours 1... C'est pas plutôt un multiset dont tu aurais besoin ?

  5. #5
    Débutant  
    Inscrit en
    Novembre 2006
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 073
    Points : 217
    Points
    217
    Par défaut
    je ne sais pas. Peut etre, mais cela n'a pas d'importance. Que ce soit multiset ou multimap je ne vois pas la différence.
    Ce que je veux, s'est introduire des vecteurs dans des listes indexées. Comme les vecteurs ne sont pas comparable, ca n'a pas d'importance.
    Par contre je veux classer en fonction de la premiere composante.
    Comme le montre l'exemple ci dessous.
    ALors je sais pas si L doit etre une multimap ou multiset.
    L[1]=(<1,0.333>;<2,334>;<3,45>;<5,453>)
    L[2]=(<1,343>;<4,545>)
    ...

  6. #6
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Vu ce que tu dis, L doit être rien, un vector suffit, en revanche, les objets stockes doivent être des multimaps ou des multisets, tu as pris le problème à l'envers - L n'a pas besoin de structure particulière dans ton exemple -

  7. #7
    Débutant  
    Inscrit en
    Novembre 2006
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 073
    Points : 217
    Points
    217
    Par défaut
    je suis pas d'accord. Car comment je vais faire pour acceder a L[10] par exemple?
    et pourquoi les ojets stockés devraient ils etre des multimap ou multiset?

  8. #8
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Avec L[10], comme pour tous les vecteurs... Tu poses mal ton problème, tu ne sais pas exactement ce qui est trié et ce qui ne l'est pas.

  9. #9
    Débutant  
    Inscrit en
    Novembre 2006
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 073
    Points : 217
    Points
    217
    Par défaut
    je suis d'accord avec toi pour que L soit un vector, mais pourquoi les éléments entre crochets devraient etre des listes?

  10. #10
    Membre habitué Avatar de b Oo
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 179
    Points : 185
    Points
    185
    Par défaut
    Salut,
    Citation Envoyé par deubelte
    je suis d'accord avec toi pour que L soit un vector, mais pourquoi les éléments entre crochets devraient etre des listes?
    Citation Envoyé par Miles
    Vu ce que tu dis, L doit être rien, un vector suffit, en revanche, les objets stockes doivent être des multimaps ou des multisets, tu as pris le problème à l'envers - L n'a pas besoin de structure particulière dans ton exemple -
    Il ne te parle pas de listes mais de multimap ou de multiset mais là c'est un multimap car la clé est différente de ce qu'elle contient.

    De plus la fonction ajout n'est pas très bien ici. Il vaut mieux faire un foncteur (c'est comme un pointeur de fonction, sauf que c'est une classe qui redéfini l'operateur ()) et cela compare tes éléments.
    b Oo

  11. #11
    Débutant  
    Inscrit en
    Novembre 2006
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 073
    Points : 217
    Points
    217
    Par défaut
    ca a l'air interessant ce que tu dis.
    Est ce que tu peux plus détailler sur le foncteur et la classe? Faire une ébauchje de code stp?
    merci

  12. #12
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970

  13. #13
    Débutant  
    Inscrit en
    Novembre 2006
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 073
    Points : 217
    Points
    217
    Par défaut
    non, parce que je ne suis pas assez expérimenté pour appliquer des foncteurs ou des classes. Alors un exemple m'aiderais beaucoup
    et ensuite, je regarderai la FAQ.

  14. #14
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    La FAQ sert à ceux qui ne connaissent pas suffisemment pour utiliser certains détails du C++, donc d'abord tu regardes la FAQ, ensuite on t'aide. Si tu avais suivi ce principe, la question n'aurait même pas été posée puisqu'il y a un exemple dans la FAQ.

  15. #15
    Membre habitué Avatar de b Oo
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 179
    Points : 185
    Points
    185
    Par défaut
    Tu peux regarder la faq en 1er et après demander un exemple.
    Je sais que l'on apprend mieux sur un exemple en rapport au code sur lequel on travaille mais bon.
    Bref donc voici comment faire :
    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
     
    #include <iostream>
    #include <set>
    #include <iterator>
     
    using namespace std;
     
    class Foncteur
    {
        public:
            // un nombre pair est plus petit qu'un nombre impair
            // et apres c'est dans l'ordre croissant
            bool operator()(const int a, const int b)
            {
                if((a%2 == 0) && (b%2 == 1))
                    return true;
                if ((a%2 == 1) && (b%2 == 0))
                    return false;
                return (a < b);
            }
    };
     
    int main()
    {
        set<int> test1;
        set<int, Foncteur> test2;
        for(int i = 10; i > 0; --i)
        {
            test1.insert(i);
            test2.insert(i);
        }
        cout << "Set sans mon foncteur :\n";
        copy(test1.begin(), test1.end(), ostream_iterator<int>(cout, "\t"));
        cout << '\n';
     
        cout << "\nSet avec mon foncteur :\n";
        copy(test2.begin(), test2.end(), ostream_iterator<int>(cout, "\t"));
        cout << '\n';
    	return 0;
    }
    b Oo

  16. #16
    Débutant  
    Inscrit en
    Novembre 2006
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 073
    Points : 217
    Points
    217
    Par défaut
    ok merci

    Et quelle amélioration cela apporte?
    je recherche surtout la rapidité (normale d'ailleurs)

  17. #17
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    633
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 633
    Points : 711
    Points
    711
    Par défaut
    Bonjour,
    Citation Envoyé par deubelte
    ok merci

    Et quelle amélioration cela apporte?
    je recherche surtout la rapidité (normale d'ailleurs)
    Il faut commencer par faire des choses qui fonctionnent. La rapidité, si elle est importante, ne vient qu'ensuite.

    (A quoi cela sert-il d'aller vite pour faire des choses fausses ?)
    Compilation sans erreur ne signifie pas programme sans erreur.
    L'indentation n'a pas été imaginée pour faire beau, mais pour faciliter la lecture des programmes.

  18. #18
    Membre habitué Avatar de b Oo
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 179
    Points : 185
    Points
    185
    Par défaut

    A quoi cela sert, ben tu n'as plus à appeler ta méthode ajout.
    Imagine ensuite que tu veux faire un autre ajout, tu vas créer une fonction ajout2 ? Et dans ton programme tu auras tonObjet.ajout(...) et plus loin tonObjet.ajout2() à tous les coups tu vas te planter pour l'appel à un endroit.

    Point de vue rapidité, je ne peux pas trop t'aider mais là tu chipottes sur des trucs qui ne feront probablement pas varier le temps d'exécution.
    Choisi déjà le bon conteneur et des bon algos et ce sera bien.
    b Oo

Discussions similaires

  1. amelioration de code par un alias
    Par bosk1000 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 03/08/2009, 09h09
  2. amelioration de code pour eviter select
    Par bosk1000 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 12/07/2009, 20h26
  3. comment ameliorer ce code?
    Par chrisl0 dans le forum Langage
    Réponses: 1
    Dernier message: 26/02/2009, 02h29
  4. [VBA-E] Amelioration dun code
    Par Elstak dans le forum Macros et VBA Excel
    Réponses: 28
    Dernier message: 06/06/2007, 13h51
  5. amelioration de code
    Par deubelte dans le forum C++
    Réponses: 18
    Dernier message: 27/12/2006, 14h31

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