Я хотел бы объявить set<int>
как член моего класса, и я хочу дать ему пользовательский компаратор, который будет использовать поля экземпляра класса внутри него.C++ set compator using поля пользователя
Что-то вроде этого:
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;
Как я могу заставить его работать? СООБЩЕНИЕ
Awesome, спасибо! Я только что нашел другой способ сделать то же самое (аналогичная идея, но используя структуру): http://stackoverflow.com/questions/27467980/how-to-define-a-stdset-sorting-on-another-class- data-member? rq = 1 –
Семантика значения этого класса разбивается на такую установку. –
@BenjaminLindley Не могли бы вы рассказать, я не понимаю. Какую альтернативу вы бы предложили? Спасибо –