C++使用成员字段设置比较器

C++ set comparator using member fields

本文关键字:设置 比较器 字段 成员 C++      更新时间:2023-10-16

我想将set<int>声明为我的类的成员,我想给它一个自定义比较器,它将使用其中的类实例字段。

像这样:

class MyClass {
  public:
    MyClass() : my_set(fn_pt) {}
    std::vector<int> blocks;
    bool comp(int lhs, int rhs) {
      return blocks[lhs] < blocks[rhs];
    }
    bool(*fn_pt)(int,int)=comp;
    std::set<int, bool(*)(int,int)> my_set;
};

这会产生一个错误:

error: cannot convert ‘MyClass::comp’ from type ‘bool (MyClass::)(int, int)’ 
to type ‘bool (*)(int, int)’
bool(*fn_pt)(int,int)=comp;

我怎样才能让它工作?谢谢

作为错误状态MyClass::comp bool (MyClass::)(int, int)不是bool (*)(int, int)

由于您实际使用this,因此static方法不是解决方案,因此您可以改为

std::set<int, std::function<bool(int, int)>> my_set;

然后

MyClass() : my_set([this](int lhs, int rhs) { return blocks[lhs] < blocks[rhs]; }) {}