Я думаю, что сообщение не определяющего оператора <заключается в том, что упорядочение является свойством коллекции, а не объекта. Разные коллекции одних и тех же предметов могут иметь разные порядки. Поэтому вам следует использовать отдельный функтор, используемый при указании типа коллекции, а не оператора <. </p>
Однако на практике у многих ваших классов может быть естественный порядок, и это единственный порядок, используемый в коллекциях в вашем приложении. В других случаях порядок может даже не относиться к приложению, а только к коллекции, чтобы он мог найти элементы позже. В этих случаях имеет смысл определить оператор <. </p>
Помните, что когда мы разрабатываем объектные модели, мы моделируем только подмножество реального мира. В реальном мире может быть множество различных способов ранжирования объектов одного и того же класса, но в той области приложения, в которой мы работаем, может быть один релевантный.
Если для кода требуется второй порядок, который так же важен, как и первый, класс следует реорганизовать для удаления оператора <и размещения обеих функций ранжирования в отдельных функторах. Это свидетельствует о том, что ни один рейтинг не важнее других. </p>
Что касается арифметических операторов, вам не следует перегружать их, если вы не используете арифметический тип.
Конечно, есть исключения из каждого правила. Если вы не знаете, следует ли делать исключение, вы, вероятно, не должны этого делать. Опыт будет вашим гидом.