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 :

Safe erase de 2 map


Sujet :

C++

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2012
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2012
    Messages : 56
    Points : 38
    Points
    38
    Par défaut Safe erase de 2 map
    Bonjour,

    admettons que les map soient déjà remplies:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    std::map<std::string, unsigned int> map1;
    std::map<std::string, bool> map2;
     
    Quelle boucle for pourrait-on mettre en oeuvre pour supprimer (erase) les deux maps à la fois, à partir de la key (it.first) ?
    Sachant que les key (std::string) sont identique à chaque position.
     
    for (...)
    {
       SI (it.Second de map2 = FAUX) ALORS
           Supprimer it map1; // Safe method
           Supprimer it map2; // Safe method
    }
    Merci.

  2. #2
    Expert éminent sénior

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Software Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 031
    Points : 11 477
    Points
    11 477
    Billets dans le blog
    11
    Par défaut
    Salut!

    Ben pas besoin de boucle, étant donnée la clef "key", on utilise map.find( key ), et map.erase( itérateur retourné par map.find( key ), en ayant vérifié au préalable qu'il ne vaut pas map.end() )
    Si vous ne trouvez plus rien, cherchez autre chose...

    Vous trouverez ici des tutoriels OpenGL moderne.
    Mon moteur 3D: Castor 3D, presque utilisable (venez participer, il y a de la place)!
    Un projet qui ne sert à rien, mais qu'il est joli (des fois) : ProceduralGenerator (Génération procédurale d'images, et post-processing).

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2012
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2012
    Messages : 56
    Points : 38
    Points
    38
    Par défaut
    Oui mais, je suis obligé de parcourir la map 2 pour récupérer l'état de it.second et supprimer dans cette condition.

  4. #4
    Expert éminent sénior

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Software Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 031
    Points : 11 477
    Points
    11 477
    Billets dans le blog
    11
    Par défaut
    Pourquoi la parcourir? map.find!
    Si vous ne trouvez plus rien, cherchez autre chose...

    Vous trouverez ici des tutoriels OpenGL moderne.
    Mon moteur 3D: Castor 3D, presque utilisable (venez participer, il y a de la place)!
    Un projet qui ne sert à rien, mais qu'il est joli (des fois) : ProceduralGenerator (Génération procédurale d'images, et post-processing).

  5. #5
    Membre expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2011
    Messages
    742
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 742
    Points : 3 641
    Points
    3 641
    Par défaut
    map::erase(it) retourne la position du prochain itérateur, il faut soit le récupérer, soit incrémenté l'itérateur d'origine.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    for (auto it = map2.begin(), end = map2.end(); it != end; ) {
      if (!pred(it->second)) {
        map1.erase(it->first);
        it = map2.erase(it);
      }
      else {
        ++it;
      }
    }
    Mais si les clefs de map1 et map2 sont identiques. envisage plutôt de regrouper les valeurs dans une même structure.

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 123
    Points : 33 023
    Points
    33 023
    Billets dans le blog
    4
    Par défaut
    Citation Envoyé par jo_link_noir Voir le message
    map::erase(it) retourne la position du prochain itérateur,
    Que depuis C++11 http://en.cppreference.com/w/cpp/container/map/erase

    Mais on peut faire un simple erase sur la clé.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  7. #7
    Membre expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2011
    Messages
    742
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 742
    Points : 3 641
    Points
    3 641
    Par défaut
    Citation Envoyé par Bousk Voir le message
    Que depuis C++11
    Le C++ existait avant C++11 ?

    Citation Envoyé par Bousk Voir le message
    Mais on peut faire un simple erase sur la clé.
    Il faut penser à sauvegarder l'itérateur suivant avant, erase invalide l'itérateur actuel.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    auto tmpit = it; // oui je sais, auto est du C++11
    ++it;
    map2.erase(tmpit);

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2012
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2012
    Messages : 56
    Points : 38
    Points
    38
    Par défaut
    Bonsoir,

    Merci à tous, et surtout toi jo_link_noir pour ta disponibilité, je n'étais pas loin du but malgré tout.

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

Discussions similaires

  1. std::map: erase dans une boucle
    Par zenux dans le forum Débuter
    Réponses: 6
    Dernier message: 03/10/2013, 21h48
  2. Problème avec erase d'une map
    Par scary dans le forum Débuter
    Réponses: 8
    Dernier message: 10/08/2010, 17h58
  3. std::map et probleme d'erase.
    Par Flow_75 dans le forum SL & STL
    Réponses: 17
    Dernier message: 06/07/2007, 01h26
  4. Source Safe -> VC++
    Par Emilio dans le forum MFC
    Réponses: 7
    Dernier message: 07/11/2002, 15h57
  5. Editeur de MAP en delphi pour jeux directX
    Par PetitScorpion dans le forum DirectX
    Réponses: 5
    Dernier message: 09/07/2002, 18h47

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