Heim > Backend-Entwicklung > C++ > Wie kann ich eine Member-Funktion als Komparator in „std::sort' verwenden?

Wie kann ich eine Member-Funktion als Komparator in „std::sort' verwenden?

Linda Hamilton
Freigeben: 2024-12-03 11:03:13
Original
942 Leute haben es durchsucht

How Can I Use a Member Function as a Comparator in `std::sort`?

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 }
Nach dem Login kopieren

Zu:

bool operator () ( const int & i1, const int & i2 ) { // use some member variables }
Nach dem Login kopieren

Die doSort-Methode geändert wird sollte dann die Vergleichsfunktion mit der folgenden Syntax aufrufen:

doSort() { std::sort(arr, arr+someSize, *this); }
Nach dem Login kopieren

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)); }
}
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage