Heim  >  Artikel  >  Backend-Entwicklung  >  Warum erhalte ich „keine Übereinstimmung für ‚operator-‘ in ‚__last – __first‘“, wenn ich eine Liste mit der STL-Sortierung in absteigender Reihenfolge sortiere?

Warum erhalte ich „keine Übereinstimmung für ‚operator-‘ in ‚__last – __first‘“, wenn ich eine Liste mit der STL-Sortierung in absteigender Reihenfolge sortiere?

Patricia Arquette
Patricia ArquetteOriginal
2024-11-09 18:16:02902Durchsuche

Why am I getting

Sortieren einer Liste mit der STL-Sortierfunktion

Beim Sortieren einer Liste in absteigender Reihenfolge mit der STL-Sortierfunktion kann es zu einem Kompilierungsfehler kommen wenn Ihre Liste Elemente einer Struktur enthält und die Komparatorfunktion nicht richtig definiert ist. Der Fehler „keine Übereinstimmung für ‚operator-‘ in ‚__last – __first‘“ weist darauf hin, dass die Sortierfunktion die Reihenfolge der Elemente in Ihrer Liste nicht bestimmen kann.

Das Problem tritt auf, weil die Sortierfunktion Iteratoren mit wahlfreiem Zugriff erfordert. welche std::list::iterators nicht sind. Listeniteratoren sind bidirektionale Iteratoren, die den Unterschied zwischen zwei Iteratoren nicht direkt berechnen können. Dadurch wird verhindert, dass die Sortierfunktion den Bereich der zu sortierenden Elemente korrekt berechnet.

Um dieses Problem zu beheben, sollten Sie die Memberfunktion std::list::sort anstelle von std::sort verwenden Funktion. Die Funktion std::list::sort verwendet bidirektionale Iteratoren und kann das Sortieren von Listen verarbeiten, die Ihre Struktur enthalten.

Hier ist ein Beispiel dafür, wie Sie std::list::sort verwenden können Funktion zum Sortieren Ihrer Liste in absteigender Reihenfolge:

Result.poly.sort([](const term& t1, const term& t2) { return t2.pow < t1.pow; });

Diese benutzerdefinierte Komparatorfunktion sortiert Ihre Liste von Strukturen ordnungsgemäß in absteigender Reihenfolge basierend auf dem Pow-Feld in jeder Struktur.

Das obige ist der detaillierte Inhalt vonWarum erhalte ich „keine Übereinstimmung für ‚operator-‘ in ‚__last – __first‘“, wenn ich eine Liste mit der STL-Sortierung in absteigender Reihenfolge sortiere?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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