如何初始化std :: set比较器?

时间:2010-09-23 21:33:38

标签: c++ stl initialization set comparator

我需要使用另一个类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...
      }
};

如果声明在某个方法中(当对象已经创建时),情况就会很简单......我该怎么办?

2 个答案:

答案 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;
}