Probleme avec la STL et un set <int> - C++ - Programmation
Marsh Posté le 11-11-2005 à 13:03:30
Code :
|
Marsh Posté le 11-11-2005 à 13:11:33
Plus spécialiste STL :
Code :
|
Marsh Posté le 11-11-2005 à 13:19:56
autre petite question :
Dans mon programme j'ai différentes définitions de types:
typedef set <int> setNumLigne;
typedef map <int, setNumLigne> mapFichiers;
typedef map < string, mapFichiers > mapId;
typedef set <string> setMotsCles;
typedef setMotsCles::iterator iterSet;
typedef mapId::iterator iterateur;
Puis cela en donnée:
mapId identificateurs;
Et je voudrais me déplacer dans le set de la map de la map.
alors j'ai fais ça:
iterSet iter3;
...un peu de code...puis
for (iter3 =iter->second.find(cpt)->second.begin();iter3 != iter->second.find(cpt)->second.end();iter3++)
{
cout << *iter3 << " ";
}
Et apparement je n'ai pas droit de faire : iter3 =iter->second.find(cpt)->second.begin();
Pourquoi ?
Marsh Posté le 11-11-2005 à 13:59:44
chaipas, en fait chui perdu dans ton truc, c'est quoi le type de iter ?
Marsh Posté le 11-11-2005 à 14:00:39
J'ai essayé ça:
Code :
|
Mais ca me donne :
`ostream_iterator' undeclared (first use this function)
Marsh Posté le 11-11-2005 à 14:03:32
en fait, ma structure est de ce type:
map < string, map < int, set <int> > >;
et iter est un itérateur sur cette structure (il est de type iterateur, type définis précédement)
Marsh Posté le 11-11-2005 à 14:04:52
et l'erreur qu'il te donne sur ton premier bout de code ?
Marsh Posté le 11-11-2005 à 14:06:19
Bonne chance....
118 H:\COURS\INSA\1ere année\C++\Tp2 -CrossRef\crossref.cpp no match for 'operator=' in 'iter3 = (((setNumLigne*)(&(((mapFichiers*)(&iter)->std::_Rb_tree_iterator<_Tp>::operator-> [with _Tp = std::pair<const std::string, mapFichiers>]()) + 4u)->std::map<_Key, _Tp, _Compare, _Alloc>::find [with _Key = int, _Tp = setNumLigne, _Compare = std::less<int>, _Alloc = std::allocator<std::pair<const int, setNumLigne> >](((const int& )((const int*)(&cpt)))))->std::_Rb_tree_iterator<_Tp>::operator-> [with _Tp = std::pair<const int, setNumLigne>]()) + 4u)->std::set<_Key, _Compare, _Alloc>::begin [with _Key = int, _Compare = std::less<int>, _Alloc = std::allocator<int>]()'
Marsh Posté le 11-11-2005 à 14:07:43
bon bin alors, je vais t'aider
map < string, map < int, set <int> > >;
typedef set <string> setMotsCles;
typedef setMotsCles::iterator iterSet;
jpense tu verras la ou y'a un pb
Marsh Posté le 11-11-2005 à 14:11:01
bon, apres, j'aime pas faire des typedefs sur des iterateurs, question de gout
Code :
|
me semble souvent plus parlant et evite d'avoir a trop réfléchir
Code :
|
cette ligne est inutilement moche et complexe. Casse la en deux
Code :
|
Marsh Posté le 11-11-2005 à 14:18:13
Je viens de voir la couillle!! je modifie!!
Marsh Posté le 11-11-2005 à 14:19:07
bon bin ecoute, file un bout de code complet, avec type et tout sinon on ne va pas s'en sortir.
Marsh Posté le 11-11-2005 à 14:23:31
Merci beaucoup, j'ai réglé le probleme.
Cela venait bien du fait que mon type d'iterateur iterSet etait réglé sur le setMotCles et pas sur setLigne....evident, mais j'avais vraiment les yeux autre part..
Merci encore!
Marsh Posté le 11-11-2005 à 14:24:11
ouais bin c'est un peu ce que je t'ai dis deux posts plus haut, mais c'est pas grave hein ?
Marsh Posté le 11-11-2005 à 14:40:48
je sais ke c ce que tu as dis deux post plus haut. Jamais dis le contraire.
Marsh Posté le 11-11-2005 à 13:00:54
Alors voila, j'ai déclarer un :
set <int> monset;
et je ne sais bêtement pas comment récupérer l'entier étant à l'itérateur moniterateur... je n'arrive pas a trouver la liste des méthodes de set...donc j'ai esséyé monset.get(moniterateur);
Ca n'existe pas..etc...
Comment faire pour afficher tout le set, en se déplaçant avec un iterateur ?
Please aidez moi jpete un cable...
Merci!