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!