C++ 使用成员字段设置比较器
C++ set comparator using member fields
我想将 set<int>
声明为我的 class 的成员,我想给它一个自定义比较器,它将使用其中的 class 实例字段.
像这样:
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]; }) {}
我想将 set<int>
声明为我的 class 的成员,我想给它一个自定义比较器,它将使用其中的 class 实例字段.
像这样:
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]; }) {}