Написание оператора <() для структуры кажется более четким, чем запись классического сравнения треугольников.Как вы пишете оператор() или менее чем функтор, чем функция сравнения с треугольником
, например, сортировать следующие
struct S {
int val;
};
вы можете написать оператор <()
bool operator< (const S &l, const S &r) {
return l.val < r.val;
}
или, в trivalue функцию (обычно следующим образом)
int compare(const S &l, const S &r) {
if(r.val > l.val) return 1;
if(r.val < l.val) return -1;
return 0;
}
Первый более четкий, поэтому вы можете сказать, что качество кода лучше. Последнее заставляет вас думать о 3 случаях, что усложняет код.
Но эта мысль немного обманывают в более сложные структуры:
struct S {
int x;
int y;
};
следующее ясно, и begginners склонны писать вот так
bool operator< (const S &l, const S &r) {
if(l.x < r.x) return true;
if(l.y < r.y) return true;
return false;
}
но это неправильно! Вы не можете правильно сортировать с этим!
И это занимает некоторое время, чтобы подумать, что вы на самом деле должны написать это как так
bool operator< (const S &l, const S &r) {
if(l.x < r.x) return true;
if(l.x > r.x) return false;
if(l.y < r.y) return true;
if(l.y > r.y) return false;
return false;
}
для того, чтобы работать правильно.
Можете ли вы и у вас написать эту функцию сравнения в удобном и понятном образе? Старая функция сравнения треугольников, по крайней мере, «вынуждающая» вас думать о>, < и == случаях.
Я не вижу разницы между двумя последними операциями <функции. – Donotalo
@ Donotalo: Тогда будьте внимательнее. –
получил. уф! .. – Donotalo