Вы уверены, что наличие порядка для вашего класса record
имеет реальное значение не только для произвольной сортировки?Рассмотрим класс для больших целых чисел, где такой порядок для ваших объектов имеет смысл, но будет ли он иметь такой правильный смысл для ваших записей?Или оно теряет смысл, если вы никогда не сортируете?
[imo] Не объединяйте этот порядок, введенный operator<
, с вашим определением класса, если оно не имеет реального соответствия с ним, другими словами, если оноИнтуитивно понятно для людей, что некоторый «объект а» меньше, чем какой-либо «объект б».
Это особенно верно, если вы когда-нибудь захотите иметь разные порядки для объектов классов с не интуитивно упорядоченным порядком, подумайте о восходящем и нисходящем, по имени, по фамилии, по количеству автомобилей и так далее.Тогда никто не вспомнит, какой у вас порядок по умолчанию, не просмотрев документацию / код, тем самым потеряв даже его удобство.
Вместо этого, либо передайте функторы, либо лямбда-функцию на месте:
#include <algorithm>
#include <functional>
#include <vector>
struct Foo {
int x;
Foo (int x) : x(x) {}
};
struct FooAscending : std::binary_function<Foo,Foo, bool>
{
bool operator() (Foo const &lhs, Foo const &rhs) const {
return lhs.x < rhs.x;
}
};
int main () {
std::vector<Foo> foos;
foos.emplace_back(1);
foos.emplace_back(2);
sort (foos.begin(), foos.end(),
[](Foo const &l, Foo const &r) { return l.x < r.x; });
sort (foos.begin(), foos.end(),
[](Foo const &l, Foo const &r) { return l.x > r.x; });
sort (foos.begin(), foos.end(), FooAscending());
}