C++使用成员字段设置比较器
C++ set comparator using member fields
我想将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]; }) {}
相关文章:
- std::设置自定义比较器
- set_intersection使用自定义设置比较器
- C++设置了一个用于排序的比较器和另一个用于唯一性的比较器
- std::为插入和排序设置不同的比较器
- std::用派生类对象设置,但用gcc8.1设置基类比较器
- 当我添加自定义比较器时,无法插入新元素以设置
- STD ::设置比较器,该比较器指的是外部值
- 用自定义比较器设置操作STD ::设置操作
- 为什么仅通过模板指定STL设置比较器
- C++中对集的自定义设置比较器
- 将标准::设置与自定义比较器进行比较
- C++使用成员字段设置比较器
- 标准::设置比较器错误:"invalid operator<"
- C++ 标准::设置<string>字母数字自定义比较器
- 是否可以在标准::设置比较器中处理相等性
- std::设置包含对与自定义比较器
- std::为2D点设置自定义比较器
- 在std::set中查找由自定义比较器设置的元素
- 使用函数指针自定义std::设置比较器
- C++标准::设置自定义比较器