Powracasz tylko -1 (mniej niż) lub +1 (więcej niż), nigdy 0 (równa się).
porównuje swoje dwa argumenty na zamówienie. Zwraca ujemną liczbę całkowitą, zero lub dodatnią liczbę całkowitą, ponieważ pierwszy argument jest mniejszy niż, równy lub większy niż drugi.
W powyższym opisie, notacja sgn (ekspresji) oznacza matematyczna funkcja signum, która jest określona, aby powrócić jedną -1, 0 lub 1, zależnie od tego czy wartość wyrażenia jest ujemne, zerowe lub dodatnie .
Wykonawca musi zapewnić, że sgn (porównaj (x, y)) == -sgn (porównaj (y, x)) dla wszystkich x i y. (Oznacza to, że porównanie (x, y) należy wyjątek, wtedy i tylko wtedy, gdy porównanie (y, x) zgłasza wyjątek.)
implementor musi zapewnić, że związek jest przechodni: ((porównaj (x, y)> 0) & & (porównaj (y, z)> 0)) oznacza porównanie (x, z)> 0.
Wreszcie, implementor musi upewnić się, że porównanie (x, y) == 0 implikuje , że sgn (porównaj (x, z)) == sgn (porównaj (y, z)) dla wszystkich z.
Jest to na ogół przypadek, ale nie jest to bezwzględnie wymagane (porównaj (x, y) == 0) == (x.równania (y)). Ogólnie rzecz biorąc, dowolny komparator, który narusza ten warunek, powinien wyraźnie wskazywać na ten fakt. Zalecanym językiem jest "Uwaga: ten komparator nakłada zamówienia, które są niespójne z równymi."
można pokazać, gdzie dzwonisz sortowania? – Kon
Czy próbowałeś użyć '! =' Zamiast manipulacji bitowej? –
Cóż, najwyraźniej nie zadziała, gdy "true, false" jest tym samym, co "false, true". (Zakładając, że sortujesz, aby oddzielić "true" i "false") – Zong