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...
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...
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...
Fanny Chevalier wrote: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.
Normal, là tu dit de prendre le vector correspondant à 1 et de le
remettre à 0.Si je fais _voisins.erase(1), ca a le meme effet...
Moins normal.
Chez moi, le code suivant fait ce qu'il faut :
#include <iostream>
#include <map>
#include <vector>
using namespace std;
typedef map<int, vector <int> > Voisins;
void affiche(Voisins const &v)
{
for (Voisins::const_iterator vi = v.begin(); vi != v.end(); ++vi)
{
cout << vi->first << " : ";
for (vector<int>::const_iterator it = vi->second.begin() ;
it != vi->second.end();
++it)
{
cout << *it << " ";
}
cout << endl;
}
}
int main(int argc, char *argv[])
{
Voisins voisin;
voisin[0].push_back(1);
voisin[0].push_back(2);
voisin[0].push_back(3);
voisin[1].push_back(0);
voisin[1].push_back(2);
voisin[1].push_back(3);
voisin[2].push_back(0);
voisin[3].push_back(1);
affiche(voisin);
voisin.erase(1);
cout << "après : " << endl;
affiche(voisin);
return 0;
}
Quel compilateur utilises tu ? Et quelle STL ?
J'utilise emacs 21.3.1 et je ne sais pas comment on voit quelle STL
Fanny Chevalier wrote:
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.
Normal, là tu dit de prendre le vector correspondant à 1 et de le
remettre à 0.
Si je fais _voisins.erase(1), ca a le meme effet...
Moins normal.
Chez moi, le code suivant fait ce qu'il faut :
#include <iostream>
#include <map>
#include <vector>
using namespace std;
typedef map<int, vector <int> > Voisins;
void affiche(Voisins const &v)
{
for (Voisins::const_iterator vi = v.begin(); vi != v.end(); ++vi)
{
cout << vi->first << " : ";
for (vector<int>::const_iterator it = vi->second.begin() ;
it != vi->second.end();
++it)
{
cout << *it << " ";
}
cout << endl;
}
}
int main(int argc, char *argv[])
{
Voisins voisin;
voisin[0].push_back(1);
voisin[0].push_back(2);
voisin[0].push_back(3);
voisin[1].push_back(0);
voisin[1].push_back(2);
voisin[1].push_back(3);
voisin[2].push_back(0);
voisin[3].push_back(1);
affiche(voisin);
voisin.erase(1);
cout << "après : " << endl;
affiche(voisin);
return 0;
}
Quel compilateur utilises tu ? Et quelle STL ?
J'utilise emacs 21.3.1 et je ne sais pas comment on voit quelle STL
Fanny Chevalier wrote: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.
Normal, là tu dit de prendre le vector correspondant à 1 et de le
remettre à 0.Si je fais _voisins.erase(1), ca a le meme effet...
Moins normal.
Chez moi, le code suivant fait ce qu'il faut :
#include <iostream>
#include <map>
#include <vector>
using namespace std;
typedef map<int, vector <int> > Voisins;
void affiche(Voisins const &v)
{
for (Voisins::const_iterator vi = v.begin(); vi != v.end(); ++vi)
{
cout << vi->first << " : ";
for (vector<int>::const_iterator it = vi->second.begin() ;
it != vi->second.end();
++it)
{
cout << *it << " ";
}
cout << endl;
}
}
int main(int argc, char *argv[])
{
Voisins voisin;
voisin[0].push_back(1);
voisin[0].push_back(2);
voisin[0].push_back(3);
voisin[1].push_back(0);
voisin[1].push_back(2);
voisin[1].push_back(3);
voisin[2].push_back(0);
voisin[3].push_back(1);
affiche(voisin);
voisin.erase(1);
cout << "après : " << endl;
affiche(voisin);
return 0;
}
Quel compilateur utilises tu ? Et quelle STL ?
J'utilise emacs 21.3.1 et je ne sais pas comment on voit quelle STL
Si tu utilises GCC, regarde ce que donne la commande
g++ -v
-- Gaby
gcc version 3.3.2 20031022 (Red Hat Linux 3.3.2-1)
Si tu utilises GCC, regarde ce que donne la commande
g++ -v
-- Gaby
gcc version 3.3.2 20031022 (Red Hat Linux 3.3.2-1)
Si tu utilises GCC, regarde ce que donne la commande
g++ -v
-- Gaby
gcc version 3.3.2 20031022 (Red Hat Linux 3.3.2-1)
Fanny Chevalier wrote: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.
Normal, là tu dit de prendre le vector correspondant à 1 et de le
remettre à 0.Si je fais _voisins.erase(1), ca a le meme effet...
Moins normal.
Chez moi, le code suivant fait ce qu'il faut :
#include <iostream>
#include <map>
#include <vector>
using namespace std;
typedef map<int, vector <int> > Voisins;
void affiche(Voisins const &v)
{
for (Voisins::const_iterator vi = v.begin(); vi != v.end(); ++vi)
{
cout << vi->first << " : ";
for (vector<int>::const_iterator it = vi->second.begin() ;
it != vi->second.end();
++it)
{
cout << *it << " ";
}
cout << endl;
}
}
int main(int argc, char *argv[])
{
Voisins voisin;
voisin[0].push_back(1);
voisin[0].push_back(2);
voisin[0].push_back(3);
voisin[1].push_back(0);
voisin[1].push_back(2);
voisin[1].push_back(3);
voisin[2].push_back(0);
voisin[3].push_back(1);
affiche(voisin);
voisin.erase(1);
cout << "après : " << endl;
affiche(voisin);
return 0;
}
Quel compilateur utilises tu ? Et quelle STL ?
Ton code me donne ce qu'il faut aussi...
Fanny Chevalier wrote:
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.
Normal, là tu dit de prendre le vector correspondant à 1 et de le
remettre à 0.
Si je fais _voisins.erase(1), ca a le meme effet...
Moins normal.
Chez moi, le code suivant fait ce qu'il faut :
#include <iostream>
#include <map>
#include <vector>
using namespace std;
typedef map<int, vector <int> > Voisins;
void affiche(Voisins const &v)
{
for (Voisins::const_iterator vi = v.begin(); vi != v.end(); ++vi)
{
cout << vi->first << " : ";
for (vector<int>::const_iterator it = vi->second.begin() ;
it != vi->second.end();
++it)
{
cout << *it << " ";
}
cout << endl;
}
}
int main(int argc, char *argv[])
{
Voisins voisin;
voisin[0].push_back(1);
voisin[0].push_back(2);
voisin[0].push_back(3);
voisin[1].push_back(0);
voisin[1].push_back(2);
voisin[1].push_back(3);
voisin[2].push_back(0);
voisin[3].push_back(1);
affiche(voisin);
voisin.erase(1);
cout << "après : " << endl;
affiche(voisin);
return 0;
}
Quel compilateur utilises tu ? Et quelle STL ?
Ton code me donne ce qu'il faut aussi...
Fanny Chevalier wrote: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.
Normal, là tu dit de prendre le vector correspondant à 1 et de le
remettre à 0.Si je fais _voisins.erase(1), ca a le meme effet...
Moins normal.
Chez moi, le code suivant fait ce qu'il faut :
#include <iostream>
#include <map>
#include <vector>
using namespace std;
typedef map<int, vector <int> > Voisins;
void affiche(Voisins const &v)
{
for (Voisins::const_iterator vi = v.begin(); vi != v.end(); ++vi)
{
cout << vi->first << " : ";
for (vector<int>::const_iterator it = vi->second.begin() ;
it != vi->second.end();
++it)
{
cout << *it << " ";
}
cout << endl;
}
}
int main(int argc, char *argv[])
{
Voisins voisin;
voisin[0].push_back(1);
voisin[0].push_back(2);
voisin[0].push_back(3);
voisin[1].push_back(0);
voisin[1].push_back(2);
voisin[1].push_back(3);
voisin[2].push_back(0);
voisin[3].push_back(1);
affiche(voisin);
voisin.erase(1);
cout << "après : " << endl;
affiche(voisin);
return 0;
}
Quel compilateur utilises tu ? Et quelle STL ?
Ton code me donne ce qu'il faut aussi...
Là, je ne suis pas d'accord. Comment te rends-tu compte que cela a le
même effet ? Tu utilises operator[] ou .find()? Il faut utiliser
find(), autrement tu vas ajouter des entrées sans le vouloir (c'est
une des propriétés subtiles de operator[] pour map<>).
Je fais afficher tous les elements, quand je met _voisisns.erase(97)
Là, je ne suis pas d'accord. Comment te rends-tu compte que cela a le
même effet ? Tu utilises operator[] ou .find()? Il faut utiliser
find(), autrement tu vas ajouter des entrées sans le vouloir (c'est
une des propriétés subtiles de operator[] pour map<>).
Je fais afficher tous les elements, quand je met _voisisns.erase(97)
Là, je ne suis pas d'accord. Comment te rends-tu compte que cela a le
même effet ? Tu utilises operator[] ou .find()? Il faut utiliser
find(), autrement tu vas ajouter des entrées sans le vouloir (c'est
une des propriétés subtiles de operator[] pour map<>).
Je fais afficher tous les elements, quand je met _voisisns.erase(97)
Voici mon code :
Voici mon code :
Voici mon code :