У меня есть 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», но, к сожалению, по этому поводу ничего не сказано.
Спасибо за ваш ответ.