1

我需要初始化一些基于 std::set 的新数据类型 TType 的比较器和另一个类 Object 的一些对象 o:

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

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

4

2 回答 2

3

模板参数需要是比较器的类型,而不是该类型的特定对象;您可以提供要在构造函数中使用的特定比较器对象std::set

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

Object o;
TType mySet(sortSet(o));
于 2010-09-23T21:41:46.607 回答
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;
}
于 2010-09-23T22:10:35.623 回答