Parcours MAP STL

Sk8yo Messages postés 27 Date d'inscription mardi 20 mai 2003 Statut Membre Dernière intervention 16 octobre 2006 - 18 août 2006 à 14:10
Sk8yo Messages postés 27 Date d'inscription mardi 20 mai 2003 Statut Membre Dernière intervention 16 octobre 2006 - 19 août 2006 à 21:25
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
A voir également:

5 réponses

luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
18 août 2006 à 17:17
"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.
0
Sk8yo Messages postés 27 Date d'inscription mardi 20 mai 2003 Statut Membre Dernière intervention 16 octobre 2006
18 août 2006 à 17:44
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++;
    }
}

???
0
Sk8yo Messages postés 27 Date d'inscription mardi 20 mai 2003 Statut Membre Dernière intervention 16 octobre 2006
18 août 2006 à 17:46
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
0
luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
18 août 2006 à 18:25
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.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Sk8yo Messages postés 27 Date d'inscription mardi 20 mai 2003 Statut Membre Dernière intervention 16 octobre 2006
19 août 2006 à 21:25
salut
bon et bien je viens de tester et ça marche parfaitement
merci encore luhtor
0
Rejoignez-nous