2010-09-23 25 views
1

J'ai besoin d'initialiser un certain comparateur de la nouvelle TTYPE de type de données basé sur std :: set avec un objet o d'une autre classe d'objets:Comment initialiser un comparateur std :: set?

typedef std::set <unsigned int, sortSet(o)> TType 

Cette déclaration est otside la classe (dans le fichier d'en-tête). Au moment de la déclaration, cet objet n'a pas besoin d'exister, il sera créé plus tard.

class sortSet 
{ 
    private: 
     Object o; 

    public: 
     sortSet(Object &oo): o(oo) {} 
     bool operator() (const unsigned int &i1, const unsigned int &i2) const 
     { 
     //Some code... 
     } 
}; 

Si la déclaration était à l'intérieur d'une méthode (lorsque l'objet a déjà été créé), la situation serait assez simple ... Que puis-je faire?

+0

Quel est le problème exactement? –

Répondre

3

Le paramètre de modèle doit être le type du comparateur, pas un objet spécifique de ce type; vous pouvez fournir un objet de comparaison spécifique à utiliser dans le constructeur std::set:

typedef std::set<unsigned int, sortSet> TType; 

Object o; 
TType mySet(sortSet(o)); 
+0

OK, ça marche maintenant, merci. – Rummy

1

Je ne sais pas si je comprends bien votre réelle question, cependant, l'idiome général à utiliser un comparateur personnalisé est indiqué ci-après exemple artificiel.

#include <set> 

class foo { 
    public: 
    int i_; 
}; 

struct foo_comparator { 
    bool operator()(foo const & lhs, foo const & rhs) { 
     return lhs.i_ < rhs.i_; 
    } 
}; 

typedef std::set< foo, foo_comparator > foo_set; 

int main() { 
    foo_set my_foo_set; 
}