Памятка:
- https://stackoverflow.com/questions/3882467/defining-operator-for-a-struct (второй ответ)
- http://www.cplusplus.com/reference/tuple/tuple/operators/
Т.е. используя std::tie()
вполне, без труда и пыли, можно сделать операторы сравнения для сложных структур. Сложности могут возникнуть, если нужно переопределить операторы сравнения для отдельных элементов (например: критерии сравнения строк).
Почему tie
, а не напрямую tuple
? tie
захватывает аргументы по ссылке - экономия на копировании.
Пример:
bool operator<(const Foo& l, const Foo& r)
{
return std::tie(l.a, l.b, l.c) < std::tie(r.a, r.b, r.c);
}
Я делаю через макрос вспомогательный:
bool operator<(const Foo& l, const Foo& r)
{
#define WRAP(x) std::tie(x.a, x.b, x.c)
return WRAP(l) < WRAP(r);
#undef WRAP
}