Parcours MAP STL

Signaler
Messages postés
27
Date d'inscription
mardi 20 mai 2003
Statut
Membre
Dernière intervention
16 octobre 2006
-
Messages postés
27
Date d'inscription
mardi 20 mai 2003
Statut
Membre
Dernière intervention
16 octobre 2006
-
bonjour,

j'utilise une structure map.
je la parcours et j' "erase()" a la volée
 est ce que cela est correct ou est ce que je fais une grosse bétise?
parce que une fois mon élagage fait ce qui reste n'est pas tres coherent

5 réponses

Messages postés
2023
Date d'inscription
mardi 24 septembre 2002
Statut
Membre
Dernière intervention
28 juillet 2008
5
"Erasé" à la volé, c'est tjs délicat. Avec les listes, on y arrive en
utilisant une boucle while puisque la fonction erase retourne un
itérateur sur la case suivante, mais quand je regarde le header de map,
la fonction erase retourne rien. Donc je doute que ton itérateur soit
encore valide (l'itérateur en argument est une copie donc aucune chance
de le modifier).


Il me parait plus prudent de stocker les clefs dans une liste et de
répasser une seconde fois apres, mais question performance, ca n'a plus
rien à voir.
Messages postés
27
Date d'inscription
mardi 20 mai 2003
Statut
Membre
Dernière intervention
16 octobre 2006

c'est bien ce que je pensait.
est ce qu'il y aurai pas moyen de gérer les itérateur du genre:

iterateur it1=map.begin();
iterateur it2;

while(it1!=map.end()){
    if(condition pour erase ok){
        it2=it1;
        map.erase(it1);
        it2++;
    }
    else{
        it1++;
    }
}

???
Messages postés
27
Date d'inscription
mardi 20 mai 2003
Statut
Membre
Dernière intervention
16 octobre 2006

le probleme etant que je ne paux pas me permettre une deuxieme passe sur mon container
ça me double ma complexité et ce n'est malheuresement pas exeptable
Messages postés
2023
Date d'inscription
mardi 24 septembre 2002
Statut
Membre
Dernière intervention
28 juillet 2008
5
Oue j'avais deja essayer le double itérateur, mais il me semble que ca fouarait :) Mais ca serait plutot:

    if(condition pour erase ok){

        it2=it1;

        it2++;

        map.erase(it1);

        it1 = it2;

    }

    else{

        it1++;

    }


C'est à (ré)essayer, puisque les itérateurs sont en gros "des pointeurs" donc ca devrait pouvoir marcher.
Messages postés
27
Date d'inscription
mardi 20 mai 2003
Statut
Membre
Dernière intervention
16 octobre 2006

salut
bon et bien je viens de tester et ça marche parfaitement
merci encore luhtor