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

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

Mary-Kate Olsen
Freigeben: 2024-12-02 18:00:21
Original
461 Leute haben es durchsucht

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

Implementieren von Mitgliedsfunktionskomparatoren zum Sortieren

In C erfordert das Sortieren einer Sammlung eine Komparatorfunktion. Der Versuch, eine Mitgliedsfunktion als Komparator zu verwenden, kann zu einem Kompilierungsfehler führen.

Problem

Betrachten Sie die folgende Klasse:

class MyClass {
    int * arr;
    // ...

    doCompare( const int & i1, const int & i2 ) { // uses member variables } 

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

Kompilieren Dieser Code kann einen Fehler erzeugen:

ISO C verbietet die Verwendung der Adresse einer nicht qualifizierten oder in Klammern gesetzten nichtstatischen Adresse Mitgliedsfunktion, um einen Zeiger auf die Mitgliedsfunktion zu bilden.

Lösung

Um dieses Problem zu lösen, besteht ein Ansatz darin, doCompare zu einer statischen Mitgliedsfunktion zu machen. Wenn doCompare jedoch Zugriff auf MyClass-Daten erfordert, können Sie MyClass in einen Vergleichsfunktor umwandeln.

Dies kann erreicht werden, indem Sie Folgendes ändern:

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

in:

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

Dann rufen Sie die Sortierfunktion wie folgt auf:

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

Zusätzlich sollte die doSort-Methode einen Wert zurückgeben, wie zum Beispiel void.

Eine andere Möglichkeit besteht darin, die Mitgliedsfunktion innerhalb der Klasse einzuschließen, wie im folgenden Beispiel 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)); }
};
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie kann ich eine Member-Funktion als Komparator in C „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