2010-09-23 2 views
1

мне нужно инициализировать некоторый компаратор нового типа данных TType на основе станда :: установить с каким-либо объектом о другом классе объекта:Как инициализировать std :: set compator?

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

Этой декларация otside класса (в заголовочном файле). Во время объявления этот объект не должен существовать, он будет создан позже.

class sortSet 
{ 
    private: 
     Object o; 

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

Если декларация была в какой-то метод (когда объект уже был создан), ситуация была бы совсем просто ... Что я могу сделать?

+0

В чем проблема? –

ответ

3

Параметр шаблона должен быть типа компаратора, а не конкретного объекта этого типа; Вы можете предоставить конкретный объект компаратора для использования в std::set конструктору:

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

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

ОК, теперь он работает, спасибо. – Rummy

1

Я не уверен, если я понял ваш фактические вопрос, однако, общая идиома использовать пользовательский компаратор показана в следующем надуманный пример.

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