Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Comment utiliser find_if avec un vector et un functor ?

3 réponses
Avatar
mderie
En deux mots, Obj represente un type d'objet quelquonque (en fait un
POD) :

class Obj;
typedef vector<Obj> Objs;

Comment plus tard tester la valeur d'une propriete de l'objet (la
cle) :

class ObjFunctor
{
private:
string m_Key;

public:
ObjFunctor(const string& key) : m_Key(key) {}
bool operator==(const Obj& obj) { return m_Key == obj.getKey(); }
};

#define KEY_VALUE "foo"

Objs objs;
...
if (find_if(objs.begin(), objs.end(), ObjFunctor(KEY_VALUE)) !=
objs.end()) // ==> Template deduction failed !!!
{
...

Rem : je ne souhaite pas utiliser un map (multimap)...

3 réponses

Avatar
Fabien LE LEZ
On 8 Nov 2007 11:18:39 -0800, mderie :

class ObjFunctor


Ce n'est pas un foncteur, puisqu'il n'y a pas d'opérateur ().

Si tu veux transformer cette classe en un foncteur, il faudrait
écrire :

class ObjFunctor
{
public:
ObjFunctor(const string& key) : m_Key(key) {}
bool operator () (const Obj& obj) const
{ return m_Key == obj.getKey(); }
private:
string m_Key;
};

Avatar
mderie
On Nov 8, 8:25 pm, Fabien LE LEZ wrote:
On 8 Nov 2007 11:18:39 -0800, mderie :

class ObjFunctor


Ce n'est pas un foncteur, puisqu'il n'y a pas d'opérateur ().

Si tu veux transformer cette classe en un foncteur, il faudrait
écrire :

class ObjFunctor
{
public:
ObjFunctor(const string& key) : m_Key(key) {}
bool operator () (const Obj& obj) const
{ return m_Key == obj.getKey(); }
private:
string m_Key;

};


Ok merci bcp !!!


Avatar
Fabien LE LEZ
On Fri, 09 Nov 2007 07:48:10 -0000, mderie :

[...]


Je t'invite à lire cette page attentivement :
http://www.usenet-fr.net/fr.usenet.reponses/usenet/repondre-sur-usenet.html