我需要使用另一个类Object的某个对象o初始化基于std :: set的新数据类型TType的一些比较器:
typedef std::set <unsigned int, sortSet(o)> TType
此声明位于类的前面(在头文件中)。在声明时,该对象不一定存在,它将在以后创建。
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));
答案 1 :(得分: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;
}