Heim >Backend-Entwicklung >C++ >Wie verwende ich Elementfunktionen korrekt zum Sortieren in C?
Member-Funktionen als Vergleich für die Sortierung
Bei der Verwendung von Member-Funktionen als Vergleichskriterium für die Sortierung kann es aufgrund der Einschränkung durch zu Kompilierungsfehlern kommen dem ISO-C-Standard. Dieser Standard verbietet die direkte Adressierung einer nicht qualifizierten oder in Klammern gesetzten nicht statischen Member-Funktion, um einen Zeiger auf eine Member-Funktion abzuleiten. Ein solcher Fehler kann beim Versuch auftreten, ein Array innerhalb einer Klasse zu sortieren.
Um dieses Problem zu beheben, besteht eine Lösung darin, die Vergleichsfunktion doCompare als statisch zu deklarieren. Wenn die Funktion jedoch auf Daten aus der MyClass-Instanz basiert, besteht ein alternativer Ansatz darin, die Klasse in einen Vergleichsfunktor umzuwandeln. Dazu muss doCompare geändert werden, um die Funktion „operator()“ zu implementieren und std::sort wie folgt aufzurufen:
doSort() { std::sort(arr,arr+someSize, *this); }
Zusätzlich lohnt es sich, den fehlenden Rückgabewert in der Methode „doSort“ zu berücksichtigen. Für eine vollständige Implementierung sollte es wie folgt aussehen:
int* doSort() { std::sort(arr,arr+someSize, &doCompare); return arr; }
Alternativ kann man std::mem_fun und binding verwenden, um die Mitgliedsfunktion in eine freie Funktion umzuwandeln. Eine andere Möglichkeit besteht darin, die Funktion in die Klasse einzubetten, wie im folgenden Snippet gezeigt:
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)); } };
Durch Auswahl eines dieser Ansätze können Entwickler die Sortierung eines Arrays innerhalb einer Klasse mithilfe einer Memberfunktion erfolgreich durchführen als Vergleichskriterium.
Das obige ist der detaillierte Inhalt vonWie verwende ich Elementfunktionen korrekt zum Sortieren in C?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!