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 :

Compilation code source


Sujet :

C++

  1. #21
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 635
    Par défaut
    Citation Envoyé par anibal Voir le message
    est ce que qqun peut me dire s'il ya qque chose qui cloche avec cette routine qui est certe mal codée mais qui normalement devrait fonctionner correctement ?

    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
     
    void EraseDistanceMap(int i, int j)
    {
    	map<pair<int, int>, int>::iterator DistanceIter;
    	bool bAdd;
    	int first_id, second_id;
     
    	for(DistanceIter=DistanceMap.begin();DistanceIter!=DistanceMap.end();bAdd?DistanceIter++:DistanceIter)
    	{
    		first_id = (*DistanceIter).first.first;
    		second_id = (*DistanceIter).first.second;
     
    		bAdd = true;
    		if(first_id == i || first_id == j || second_id == i || second_id == j)
    		{
    			DistanceMap.erase(DistanceIter);
    			bAdd = false;
    		}
    	}
    }
    Je suis toujours pas convaincu que la boucle soit vraiment efficace
    Je verrais bien mieux un algorithme identique à ce que j'ai déjà proposé plus haut
    Citation Envoyé par Médinoc Voir le message
    Je ne suis pas sûr du test sur first_id et second_id...
    Assez bizarement, cela fonctionne très bien:
    on obtient "simplement" une map dont la clé est ce qui se rapproche fort d'une "clé primaire composée" dans une base de donnée...

    Ainsi, le code
    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 <iostream>
    #include <map>
    using namespace std;
    int main()
    {
        map<pair<int, int>, int> lamap;
        for(int i=0;i<10;i++)
            lamap.insert(make_pair(make_pair(1,i),i*10));
        cout<<lamap.size()<<endl;
        for(map<pair<int, int>, int>::iterator it=lamap.begin();
            it!=lamap.end();it++)
            cout<<(*it).first.first<<"\t"
                  <<(*it).first.second<<"\t"
                  <<(*it).second
                  <<endl;
        return 0;
    }
    donne la sortie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    10   //le nombre d'élélements :D
    1        0        0
    1        1        10
    1        2        20
    1        3        30
    1        4        40
    1        5        50
    1        6        60
    1        7        70
    1        8        80
    1        9        90
    1        10       100
    L'inconvéniant résidant, comme pour toute clé primaire composée dans une base de donnés, dans le fait que tu devra fournir exactement la pair en cas de recherche
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    lamap.find(1);//refusé
    lamap.find(make_pair(1,5);//accepté
    lamap.find(make_pair(2,6);//non trouvé
    lamap.find(make_pair(1,12);//non trouvé
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  2. #22
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 394
    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 394
    Par défaut
    Je n'ai rien contre UN test sur deux IDs.
    C'est juste que je ne suis pas sûr que celui-ci soit fait correctement...
    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. #23
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 635
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    Je n'ai rien contre UN test sur deux IDs.
    C'est juste que je ne suis pas sûr que celui-ci soit fait correctement...
    Au temps pour moi... j'avais mal interprété tes écrits
    Il est vrai que le test à de quoi laisser pantois...

    Tel qu'écrit, cela signifie qu'il faudrait supprimer systématiquement tous les élemnts qui ont i ou j dans la clé sans distinction de la position de i ou de j, à savoir
    1. DistanceMap[i][n'importe quoi]
    2. DistanceMap[n'importe quoi][i]
    3. DistanceMap[j][n'importe quoi]
    4. DistanceMap[n'importe quoi][j]
    Cela me semble peut etre un peu excessif comme suppression, non

    Et bon, autant le rappeler encore une fois, tu risques de perdre l'itérateur lors de chaque suppression effectuée...

    J'ai fournis plus haut quelques possibilités pour pallier ce problème
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

Discussions similaires

  1. compiler code source de trueCrypt
    Par boubounagh dans le forum Visual C++
    Réponses: 1
    Dernier message: 02/10/2012, 19h12
  2. compiler code source BIRT 4.0
    Par maatrihard dans le forum BIRT
    Réponses: 0
    Dernier message: 30/06/2012, 20h28
  3. Ouvrir .vcproj, compiler codes sources
    Par Lyth_o dans le forum Visual Studio
    Réponses: 3
    Dernier message: 06/11/2011, 18h46
  4. compiler code source en "interne"
    Par kespy13 dans le forum Général Java
    Réponses: 5
    Dernier message: 30/04/2008, 14h46
  5. probleme compilation code source sur autre pc
    Par milach dans le forum Visual C++
    Réponses: 1
    Dernier message: 18/04/2008, 09h06

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