Definición de <para algoritmo de ordenación STL: ¿sobrecarga del operador, functor o función independiente?

Tengo una lista stl :: que contiene objetos de clase Widget. Deben clasificarse según dos miembros en la clase Widget.

Para que la ordenación funcione, se debe definir un comparador menor que comparando dos objetos Widget. Parece que hay una miríada de formas de hacerlo. De lo que puedo reunir, uno puede:

a. Defina una sobrecarga del operador de comparación en la clase:

bool Widget::operator< (const Widget &rhs) const

si. Defina una función independiente tomando dos widgets:

bool operator<(const Widget& lhs, const Widget& rhs);

Y luego haz que la clase Widget sea amiga de ella:

class Widget {
    // Various class definitions ...
    friend bool operator<(const Widget& lhs, const Widget& rhs);
};

C. Defina un functor y luego inclúyalo como parámetro cuando llame a la función de clasificación:

class Widget_Less :
public binary_function<Widget, Widget, bool> { 
    bool operator()(const Widget &lhs, const Widget& rhs) const;
};

¿Alguien sabe qué método es mejor? En particular, me interesa saber si debo hacer 1 o 2. Busqué en el libro Effective STL de Scott Meyer, pero desafortunadamente no tiene nada que decir al respecto.

Gracias por su respuesta.

Respuestas a la pregunta(4)

Su respuesta a la pregunta