Heim >Backend-Entwicklung >C++ >Wie kann ich eine Member-Funktion als Komparator in „std::sort' verwenden?
Member-Funktion als Komparator bei der Problemsortierung
Beim Versuch, den bereitgestellten Code zu verwenden, löst der Compiler einen Fehler aus, der den Adressabruf von unqualifizierten Personen verbietet oder in Klammern gesetzte nicht statische Memberfunktionen, um Zeiger auf Memberfunktionen zu bilden. Das Problem ergibt sich aus der nicht statischen Definition der doCompare-Mitgliedsfunktion.
Um dieses Problem zu beheben, ist es notwendig, doCompare als statisch zu deklarieren. Wenn die Funktion jedoch Zugriff auf Daten aus MyClass erfordert, kann die Klasse in einen Vergleichsfunktor umgewandelt werden, indem doCompare von:
doCompare( const int & i1, const int & i2 ) { // use some member variables }
Zu:
bool operator () ( const int & i1, const int & i2 ) { // use some member variables }
Die doSort-Methode geändert wird sollte dann die Vergleichsfunktion mit der folgenden Syntax aufrufen:
doSort() { std::sort(arr, arr+someSize, *this); }
Alternativ ist eine Hebelwirkung möglich std::mem_fun, um die Mitgliedsfunktion in eine freie Funktion umzuwandeln. Da std::sort die Vergleichsfunktion jedoch nach Wert akzeptiert, wird empfohlen, die Funktion in die Klasse selbst einzubinden. Der geänderte Code, der diesen Ansatz verwendet, sieht wie folgt aus:
class MyClass { struct Less { Less(const MyClass& c) : myClass(c) {} bool operator () ( const int & i1, const int & i2 ) {// use 'myClass'} MyClass& myClass; }; doSort() { std::sort(arr, arr+someSize, Less(*this)); } }
Das obige ist der detaillierte Inhalt vonWie kann ich eine Member-Funktion als Komparator in „std::sort' verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!