OVH Cloud OVH Cloud

[map] enlever une clé

14 réponses
Avatar
Fanny Chevalier
Bonjour,

J'ai une map map <int, vector <int> > _voisins;
qui me permet d'avoir acces a l'ensemble des voisins d'un element.
Lorsque l'element disparait, je voudrait supprimer la case contenant
l'element :

lorsque je supprime l'element 1, dont les voisins etaient 4,6,8
je ne veux plus que mon iterateur s'arrete sur la case 1.

Si je fais _voisins[1].clear(), je n'ai plus la liste des voisins mais
l'element 1 est toujours dans la map.
Si je fais _voisins.erase(1), ca a le meme effet...

Comment faire pour supprimer la cle 1 ?

Merci par avance.

Fanny

4 réponses

1 2
Avatar
Loïc Joly
Fanny Chevalier wrote:
Voici mon code :


Pourrais-tu faire ce que sur fr.comp.text.tex un ECM (c'est à dire un
Exemple Complet et Minimal). Minimal pour qu'on n'ait pas à gérer des
aspects non liés au problème, complet pour qu'on puisse compiler
directement sans devoir faire des suppositions sur ton problème qui
risquent :
- De nous prendre du temps,
- De faire disparaitre le problème, qui est certaienment ailleur que là
où l'on pense et qui fait donc souvent partie du code non posté.

Souvent, d'après mon expérience, quand on fait cet exercice, on trouve
le problème tout seul ;), et dans les rares cas où ça n'arrive pas, les
autres peuvent aider de manière plus pertinente.

--
Loïc

Avatar
Fanny Chevalier
Étrange. J'ai réalisé quelques modifications sur ton code, mais il
s'agit principalement de modifications de style, ou de réagancement de
code, sans réelle modification de l'algorithme. J'ai ensuite testé
avec un sous-ensemble des valeurs que tu donnais, et j'obtiens bien la
bonne réponse.



Ok, ca fonctionne...

Je faisait une boucle qui consiste a regarder tous les elements de mon
graphe et a effectuer
des fusion de noeuds voisins si possible...
Le probleme de mon code c'est que j'appelais la boucle comme ceci :
for (unsigned int i = O ; i < tousLesNoeuds.size() ; i++)
etudier(tousLesNoeuds[i])
et en mettant des iterateurs partout ca marche pasque mes map et
vecteurs sont mis a jour,
l'iterateur s'adapte contrairement a l'accesseur [].
Merci beaucoup...

Avatar
Gabriel Dos Reis
Fanny Chevalier writes:

| > Étrange. J'ai réalisé quelques modifications sur ton code, mais il
| >s'agit principalement de modifications de style, ou de réagancement de
| >code, sans réelle modification de l'algorithme. J'ai ensuite testé
| >avec un sous-ensemble des valeurs que tu donnais, et j'obtiens bien la
| >bonne réponse.
| >
| >
| Ok, ca fonctionne...
| Je faisait une boucle qui consiste a regarder tous les elements de mon
| graphe et a effectuer
| des fusion de noeuds voisins si possible...
| Le probleme de mon code c'est que j'appelais la boucle comme ceci :
| for (unsigned int i = O ; i < tousLesNoeuds.size() ; i++)
| etudier(tousLesNoeuds[i])
| et en mettant des iterateurs partout ca marche pasque mes map et
| vecteurs sont mis a jour,
| l'iterateur s'adapte contrairement a l'accesseur [].

C'est bien ce que j'avais dit tout début, non ? :-/

| Merci beaucoup...
|

--
Gabriel Dos Reis

Texas A&M University -- Computer Science Department
301, Bright Building -- College Station, TX 77843-3112
Avatar
Fanny Chevalier

C'est bien ce que j'avais dit tout début, non ? :-/


Ouais en effet... Mais je n'avais pas change partout... Jusqu'en amont...

Merci pour ton aide, meme si je n'ai pas su en profiter sur le coup

1 2