Heim > Backend-Entwicklung > C++ > Warum kann ich eine Liste nicht in absteigender Reihenfolge mit „std::sort' und einem benutzerdefinierten Vergleicher sortieren?

Warum kann ich eine Liste nicht in absteigender Reihenfolge mit „std::sort' und einem benutzerdefinierten Vergleicher sortieren?

Patricia Arquette
Freigeben: 2024-11-20 16:53:28
Original
490 Leute haben es durchsucht

Why Can't I Sort a List in Descending Order Using `std::sort` and a Custom Comparator?

Sortieren von Listen mit der STL-Sortierfunktion

Die Implementierung der Listensortierung in absteigender Reihenfolge kann eine Herausforderung sein, wenn die Liste Objekte einer benutzerdefinierten Struktur enthält. Das Problem, auf das Sie gestoßen sind, „keine Übereinstimmung für ‚operator-‘ in ‚__last – __first‘“, offenbart jedoch ein tieferes Problem mit dem gewählten Sortieransatz.

Die bereitgestellte SortDescending-Struktur definiert korrekt einen Operator zum Vergleichen zweier Begriffe, aber dies geschieht auf der Grundlage ihrer Leistung, t2.pow < t1.pow. Dieser Vergleich ist jedoch nicht mit der Standardsortierfunktion kompatibel.

Das Problem ergibt sich aus der Tatsache, dass std::sort Iteratoren mit wahlfreiem Zugriff erfordert, die Listeniteratoren nicht bieten. Mit bidirektionalen Iteratoren wie denen in std::list können Sie sich durch die Liste bewegen, es fehlen ihnen jedoch die notwendigen Fähigkeiten, um Direktzugriff oder Zeigerarithmetik durchzuführen.

So sortieren Sie eine Liste mithilfe der STL-Sortierfunktion nach dem Zufallsprinzip Zugriffsiteratoren müssen verfügbar sein. Ein alternativer Ansatz ist die Verwendung der Memberfunktion std::list::sort. Diese Funktion akzeptiert eine Komparatorfunktion als Argument, sodass Sie benutzerdefinierte Sortierkriterien definieren können.

In Ihrem Fall sortiert der folgende Code die Liste in absteigender Reihenfolge basierend auf der Leistungsfähigkeit ihrer Begriffe:

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

Durch die Verwendung der richtigen Iteratoren und der entsprechenden Sortierfunktion können Sie Ihre Liste effektiv in der gewünschten Reihenfolge sortieren.

Das obige ist der detaillierte Inhalt vonWarum kann ich eine Liste nicht in absteigender Reihenfolge mit „std::sort' und einem benutzerdefinierten Vergleicher sortieren?. 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