У меня есть stl:: list, содержащий объекты класса Widget. Они должны быть отсортированы в соответствии с двумя членами класса Widget.
Для сортировки для работы необходимо определить меньше, чем компаратор, сравнивающий два объекта Widget. Кажется, существует множество способов сделать это. Из того, что я могу собрать, можно либо:
а. Определите перегрузку оператора сравнения в классе:
bool Widget::operator< (const Widget &rhs) const
б. Определите автономную функцию, используя два виджета:
bool operator<(const Widget& lhs, const Widget& rhs);
И затем сделайте класс Widget своим другом:
class Widget {
// Various class definitions ...
friend bool operator<(const Widget& lhs, const Widget& rhs);
};
с. Определите функтор, а затем включите его в качестве параметра при вызове функции сортировки:
class Widget_Less :
public binary_function<Widget, Widget, bool> {
bool operator()(const Widget &lhs, const Widget& rhs) const;
};
Кто-нибудь знает, какой метод лучше? В частности, мне интересно узнать, должен ли я делать 1 или 2. Я обыскал книгу "Эффективный STL" Скотта Мейера, но, к сожалению, об этом нечего сказать.
Спасибо за ваш ответ.