Problème d'itérateur sur une structure

Potchi Messages postés 11 Date d'inscription mercredi 26 mai 2004 Statut Membre Dernière intervention 27 août 2004 - 26 août 2004 à 14:13
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 - 27 août 2004 à 20:12
Bonjour,

Petit problème de débutant :

J'ai une structure style

typedef struct Distrib_Annuelle
{
int Année ;
int Compteur ;
}

J'ai déclaré une liste : list<Distrib_Annuelle> L1;
et un itérateur : list<Distrib_Annuelle>::iterator courant;

maintenant je voudrai effectuer une recherche portant sur le champ 'Année' avec la l'algo find() de la librairie STL ...

courant = find(L1.begin(),L1.end(),??? et là ????);

Y aurait-il kelk'un pour m'éclairer pleazz........

Merci >>>

78 réponses

cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
26 août 2004 à 14:25
on est en c++, pas besoin de typedef

struct Distrib_Annuelle
{
int Année ;
int Compteur ;
}

courant = find(L1.begin(),L1.end(), objet_recherché );

ya de la bonne doc sur sgi

http://www.sgi.com/tech/stl
0
Potchi Messages postés 11 Date d'inscription mercredi 26 mai 2004 Statut Membre Dernière intervention 27 août 2004
26 août 2004 à 14:36
Merci pour la doc, j'y jette un oeuil de suite....

en attendant, est-ce ke ça te dirai quelquechose ça ? :

[C++ Error] _algobase.c(173): E2093 'operator==' not implemented in type 'FredStatsClass::Distrib_Annuelle' for arguments of the same type
0
Potchi Messages postés 11 Date d'inscription mercredi 26 mai 2004 Statut Membre Dernière intervention 27 août 2004
26 août 2004 à 14:37
Merci pour la doc djl, j'y jette un oeuil de suite....

en attendant, est-ce ke ça te dirai quelquechose ça ? :

[C++ Error] _algobase.c(173): E2093 'operator==' not implemented in type 'FredStatsClass::Distrib_Annuelle' for arguments of the same type
0
Potchi Messages postés 11 Date d'inscription mercredi 26 mai 2004 Statut Membre Dernière intervention 27 août 2004
26 août 2004 à 14:41
Si j'y déclare l'opérateur :

bool operator==(const Distrib_Annuelle &a, const Distrib_Annuelle &b);

y compile mais fait pas les liens.....
0

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

Posez votre question
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
26 août 2004 à 14:48
il faut le definir également

struct Distrib_Annuelle
{
int Année ;
int Compteur ;

bool operator == (const Distrib_Annuelle& a )
{return Annee a.Annee && Compteur a.Compteur;
}

};
0
magic_Nono Messages postés 1878 Date d'inscription jeudi 16 octobre 2003 Statut Membre Dernière intervention 16 mars 2011
26 août 2004 à 14:54
C pas celui par défaut que tu as donné là djl

y a que des int

po besoin de le spécifier alors....

Magic Nono: l'informagicien! 8-)
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
26 août 2004 à 15:03
il n'y a pas d'operateur == par defaut, une classe possede que son corps coplien par defaut
0
leprov Messages postés 1160 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 21 octobre 2010 17
27 août 2004 à 08:45
elle possède aussi un constructeur par defaut, un constructeur par recopie, un destructeur, et l'operateur = (recopie) djl......
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
27 août 2004 à 08:58
c'est ce que j'ai dit! le corps coplien, la forme canonique quoi
0
leprov Messages postés 1160 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 21 octobre 2010 17
27 août 2004 à 08:59
ah dsl....pas fait gaffe
0
magic_Nono Messages postés 1878 Date d'inscription jeudi 16 octobre 2003 Statut Membre Dernière intervention 16 mars 2011
27 août 2004 à 09:00
lol, js vu ce mot....

k

merci pr sa trad le Prov

& ui, C bien ça ....

+++

Magic Nono: l'informagicien! 8-)
0
Potchi Messages postés 11 Date d'inscription mercredi 26 mai 2004 Statut Membre Dernière intervention 27 août 2004
27 août 2004 à 10:02
Merci pour le tuyau, mais G encore une question de débutant concernant l'opérateur < ...

J'veux que la comparaison se fasse sur sur le champ 'année'. Si j'y déclare

bool operator < (const AnnualDistrib& a)
{
return Year < a.Year ;
}

dans la structure, et il me répond :

[C++ Error] _function_base.h(73): E2093 'operator<' not implemented in type 'FredStatsClass::Distrib_Annuelle' for arguments of the same type

???
0
magic_Nono Messages postés 1878 Date d'inscription jeudi 16 octobre 2003 Statut Membre Dernière intervention 16 mars 2011
27 août 2004 à 10:17
exemple d'operateur

bool bEltOccurence::operator<=(bEltOccurence e)const
{
return(elt<=e.elt);
}

ne pas oublier de mettre une ref ds la classe:

class bEltOccurence
{
....
bool operator<=(bEltOccurence e)const;
private:
BString elt;
unsigned int nbOcc;
bool trieOcc;

}

Magic Nono: l'informagicien! 8-)
0
Potchi Messages postés 11 Date d'inscription mercredi 26 mai 2004 Statut Membre Dernière intervention 27 août 2004
27 août 2004 à 10:33
Ok, je vais méditer la dessus... me je suis obligé d'encapsuler la structure ??
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
27 août 2004 à 10:44
non
0
magic_Nono Messages postés 1878 Date d'inscription jeudi 16 octobre 2003 Statut Membre Dernière intervention 16 mars 2011
27 août 2004 à 10:45
oups, CT po le mie que G dit plus haut

bool operator<=(const bEltOccurence& e)const;

sera nettement plus rapide....

encapsuler?????

en tt cas, il faut que l'operateur soit défini ds une classe

++
Magic Nono: l'informagicien! 8-)
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
27 août 2004 à 10:53
l'operateur externe à l'avantage d'etre symetrique
0
magic_Nono Messages postés 1878 Date d'inscription jeudi 16 octobre 2003 Statut Membre Dernière intervention 16 mars 2011
27 août 2004 à 10:55
ui, mé extern => comme friend, à éviter...

Magic Nono: l'informagicien! 8-)
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
27 août 2004 à 11:00
c'est vrai, surtout friend, mais du moment qu'on sait ce qu'on fais
chacun fais comme il l'entend
0
Potchi Messages postés 11 Date d'inscription mercredi 26 mai 2004 Statut Membre Dernière intervention 27 août 2004
27 août 2004 à 15:38
J'essaie de tout faire tout comme vous dites, mais C mon premier prog en C++, et j'gallère !!!

Vous pouvez me dire ou ça plante ???

/*.....................*/

class Stats
{
bool operator != (const Distrib_Annuelle )const;
bool operator == (const Distrib_Annuelle )const;

public:
// Déclaration des méthodes...

struct Distrib_Annuelle
{
int Année ;
int Compteur ;

bool operator == (const Distrib_Annuelle & a)const
{ return (Année a.Année && Compteur a.Compteur);
}

bool operator != (const Distrib_Annuelle & a)const
{
return (Année != a.Année && Compteur != a.Compteur);
}
}StructTemp;

list<Distrib_Annuelle> L1;
list<Distrib_Annuelle>::iterator location;

private etc...
}

/*...............*/

Main (en gros...):

while((location != L1.end()) || (location->Year != X))
location++; // Positionnement du curseur

if (location==L1.end())
{
StructTemp.Année = X;
StructTemp.Compteur=1;
L1.push_front(StructTemp);
// L1.sort();
}

else if (location!=L1.end())
location->Compteur++;

/*.............*/

Si j'utilise sort() ou find() ça plante d'autant plus !!

Encore merci.....
0
Rejoignez-nous