Ich habe eine Klasse Funktor (zu komplex, um als Lambda zu implementieren), aber um die Idee zu streichen, möchte ich sicherstellen, dass der Funktor das Compare Prädikat erfüllt. Das Problem ist, ich möchte, dass alle Werte größer als (1)
aufsteigende Reihenfolge ergeben, aber alle Werte von (1)
am "Ende" platzieren - z. B. als "größere" Werte behandelt werden.C++ mit 'Tweaked' vergleichen Funktor vergleichen
z.B. {2, 2, 2, 3, 3, 3, 4, 5, 6, 6, ..., 1, 1, 1}
das Funktionsobjekt als struct wird Argument von einem (kompliziert) Objekt zu extrahieren Referenz mit, aber der wichtigste Teil ist, in dem Funktionsobjekt das Verfahren konstruiert implementiert ist. Zur Vereinfachung:
bool operator() (unsigned i, unsigned j)
{
if (i == 1) return false; // (1 >= x)
if (j == 1) return true; // (x <= 1)
return (i < j);
}
Dies scheint mit std::sort
und std::stable_sort
wie erwartet zu funktionieren. Aber, ich bin immer noch nicht überzeugt, dass es die Kriterien für Compare
, in Bezug auf strenge schwache Ordnung korrekt erfüllt. Beachten Sie, dass x <= 1
in allen Fällen - also für: i, j >= 1
. Klar, (1, 1) => false
Ist meine "Tweaked" Funktor korrekt, auch wenn es am Ende Werte von (1)
platziert? Das ist (1)
wurde behandelt, um als größer als Werte x > 1
interpretiert werden? Oder habe ich gerade Glück mit meinen sort
Implementierungen?
Wie ich geklärt haben sollte, wird der Wert (0)
nicht auftritt. Ich hatte dies ursprünglich in einem Kommentar für die (sehr schlaue) angenommene Antwort aber versehentlich gelöscht.
Sieht OK wie geschrieben. Lies einfach "1" als "Unendlichkeit", um dich selbst zu überzeugen. –
@IgorTandetnik - das ist ein sehr nützlicher Ratschlag, da ich die Fälle "i = 1" und "j = 1" vor dem Vergleich explizit eliminiere. Es sind eher die formalen Definitionen des 'Compare'-Prädikats, zu denen ich mich nicht hundertprozentig sicher bin. –
Nun, [hier sind die Anforderungen] (http://en.cppreference.com/w/cpp/concept/Compare). Ich bin mir nicht sicher, wie ich dir helfen kann, dich davon zu überzeugen, dass dein Prädikat sie erfüllt. –