[C++] Come inizializzare un comparatore std :: set?



Answers

Non sono sicuro di aver capito la tua domanda, tuttavia, l'espressione generale per usare un comparatore personalizzato è mostrata nel seguente esempio forzato.

#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;
}
Question

Ho bisogno di inizializzare qualche comparatore del nuovo tipo di dati TType basato su std :: set con qualche oggetto o di un'altra classe Object:

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

Questa dichiarazione è al di fuori della classe (nel file di intestazione). Al momento della dichiarazione questo oggetto non deve esistere, verrà creato in seguito.

class sortSet
{
   private:
      Object o;

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

Se la dichiarazione fosse all'interno di un metodo (quando l'oggetto è già stato creato), la situazione sarebbe piuttosto semplice ... Che cosa posso fare?




Links