operator< を定義しないことの背後にあるメッセージは、順序付けはオブジェクトではなくコレクションのプロパティであるということだと思います。同じオブジェクトのコレクションが異なれば、順序が異なる場合があります。そのため、operator< ではなく、コレクションの型を指定するときに使用する別のファンクターを使用する必要があります。
ただし実際には、多くのクラスに自然な順序付けがあり、それがアプリケーションのコレクションで使用される唯一の順序付けになります。それ以外の場合、順序付けはアプリケーションに関係なく、後でアイテムを見つけることができるようにコレクションにのみ関係する場合があります。このような場合、operator< を定義することは完全に理にかなっています。
オブジェクト モデルを設計するときは、現実世界のサブセットのみをモデル化していることを思い出してください。現実の世界では、同じクラスのオブジェクトをランク付けするさまざまな方法が無数にあるかもしれませんが、私たちが取り組んでいるアプリケーション ドメインでは、関連するものがあるかもしれません。
コードが進化して、最初の順序付けと同じくらい適切な 2 番目の順序付けが必要になった場合は、クラスをリファクタリングして operator< を削除し、両方のランキング関数を別々のファンクターに配置する必要があります。これは、どのランキングも他のランキングよりも重要ではないという意図を示しています。
算術演算子に関しては、算術型を実装する場合を除き、これらをオーバーロードしないでください。
もちろん、すべての規則には例外があります。例外を作成する必要があるかどうかがわからない場合は、おそらくすべきではありません。経験があなたのガイドになります。