Ich möchte eine set<int>
als ein Mitglied meiner Klasse zu deklarieren, und ich möchte es einen benutzerdefinierten Komparator geben, der die Klasseninstanz Felder innerhalb davon verwenden wird.C++ setzen Vergleicher mit Member-Felder
Etwas wie folgt aus:
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;
};
dies ein Fehler gibt:
error: cannot convert ‘MyClass::comp’ from type ‘bool (MyClass::)(int, int)’
to type ‘bool (*)(int, int)’
bool(*fn_pt)(int,int)=comp;
Wie kann ich es zur Arbeit? Danke
Awesome, thanks! Ich habe gerade einen anderen Weg gefunden, das Gleiche zu tun (ähnliche Idee, aber mit einer Struktur): http://stackoverflow.com/questions/27467980/how-to-define-a-stdset-sorting-on-another-class- data-member? rq = 1 –
Die Wertesemantik dieser Klasse wird mit einem solchen Setup gebrochen. –
@BenjaminLindley Können Sie bitte erarbeiten, verstehe ich nicht. Welche Alternative würdest du vorschlagen? Danke –