Probleme avec la STL et un set <int>

Probleme avec la STL et un set <int> - C++ - Programmation

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!

Reply

Marsh Posté le 11-11-2005 à 13:00:54   

Reply

Marsh Posté le 11-11-2005 à 13:03:30    

Code :
  1. monInt = *monitétateur;


Message édité par elianor le 11-11-2005 à 13:03:44

---------------
JE JE SUIS LIBERTINEEEEEEEEEEE JE SUIS UNE CATINNNNNNNNN §§§§§§§§
Reply

Marsh Posté le 11-11-2005 à 13:11:11    

Merci je vais essayer avec ça!

Reply

Marsh Posté le 11-11-2005 à 13:11:33    

Plus spécialiste STL :  
 

Code :
  1. copy(monSet.begin(), monSet.end(), std::ostream_iterator<int>(std::cout, " " ));


Message édité par elianor le 11-11-2005 à 13:11:51

---------------
JE JE SUIS LIBERTINEEEEEEEEEEE JE SUIS UNE CATINNNNNNNNN §§§§§§§§
Reply

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 ? :sweat:

Reply

Marsh Posté le 11-11-2005 à 13:29:45    

find() renvoie deja un iterateur

Reply

Marsh Posté le 11-11-2005 à 13:58:42    

et je devrais ecrire koi a la place ?

Reply

Marsh Posté le 11-11-2005 à 13:59:44    

chaipas, en fait chui perdu dans ton truc, c'est quoi le type de iter ?

Reply

Marsh Posté le 11-11-2005 à 14:00:39    

 
 
J'ai essayé ça:
 

Code :
  1. copy(iter->second.find(cpt)->second.begin(),iter->second.find(cpt)->second.end(),ostream_iterator<int>(cout, " " ));


 
Mais ca me donne :
`ostream_iterator' undeclared (first use this function)

Reply

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)


Message édité par dustnet le 11-11-2005 à 14:04:42
Reply

Marsh Posté le 11-11-2005 à 14:03:32   

Reply

Marsh Posté le 11-11-2005 à 14:04:52    

et l'erreur qu'il te donne sur ton premier bout de code ?

Reply

Marsh Posté le 11-11-2005 à 14:06:19    

Bonne chance.... :sarcastic:  
 
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>]()'

Reply

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

Reply

Marsh Posté le 11-11-2005 à 14:11:01    

bon, apres, j'aime pas faire des typedefs sur des iterateurs, question de gout

Code :
  1. typedef std::set<int> monSet;
  2. monSet::iterator truc;


 
 
me semble souvent plus parlant et evite d'avoir a trop réfléchir
 

Code :
  1. for (iter3 =iter->second.find(cpt)->second.begin();iter3 != iter->second.find(cpt)->second.end();iter3++)


 
cette ligne est inutilement moche et complexe. Casse la en deux
 

Code :
  1. setNumLigne &trucmachin= iter->second.find(cpt)->second;
  2. for (iter3 =trucmachin.begin();iter3 != trucmachin.end();iter3++)


 

Reply

Marsh Posté le 11-11-2005 à 14:18:13    

Je viens de voir la couillle!! je modifie!!


Message édité par dustnet le 11-11-2005 à 14:19:25
Reply

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.

Reply

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!

Reply

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 ? [:moule_bite]

Reply

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.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed