Creo que el mensaje detrás de no definir el operador < es que el pedido es una propiedad de la colección, no del objeto. Las diferentes colecciones de los mismos objetos pueden tener diferentes ordenamientos. Por lo tanto, debe usar un functor separado para especificar el tipo de colección en lugar del operador <.
En la práctica, sin embargo, muchas de sus clases pueden tener un orden natural y ese es el único pedido utilizado en las colecciones en su aplicación. En otros casos, el pedido puede no ser relevante para la aplicación, solo la colección para que pueda encontrar los artículos más adelante. En estos casos, tiene mucho sentido definir el operador <.
Recuerde, cuando diseñamos modelos de objetos, solo estamos modelando un subconjunto del mundo real. En el mundo real, puede haber muchas formas diferentes de clasificar objetos de la misma clase, pero en el dominio de la aplicación en el que trabajamos puede haber una que sea relevante.
Si el código evoluciona a necesitar un segundo orden que es tan relevante como la primera, la clase debe refactorizado para eliminar operador < y colocar ambas funciones de clasificación de palabras funcionales separadas. Esto muestra la intención de que ninguna clasificación es más importante que las otras.
Con respecto a los operadores aritméticos, no debe sobrecargar estos a menos que esté implementando un tipo aritmético.
Por supuesto, hay excepciones para cada regla. Si no sabe si debe hacer una excepción o no, probablemente no debería hacerlo. La experiencia será tu guía.
La Guía de estilo de Google es demasiado restrictiva.También deja de usar 'cout' y' cin'. – rlbond