Как я могу отсортировать список классов по определенной переменной-члену?
class Klasse {
int _a;
int _b;
}
...
list<Klasse> liste;
liste.sort(); // sorts by _a
liste.sort(?); // how to sort by _b now?
Вы бы использовали объект сравнения. Вот пример использования лямбда.
std::list<Klasse> liste;
liste.sort([](Klasse const & lhs, Klasse const & rhs) {
return lhs._b < rhs._b;
});
Вы можете написать функцию сравнения — в основном все, что может быть вызвано с двумя аргументами типа элемента вашего списка, и этот вызов возвращает значение, конвертируемое в bool
, Такое «что угодно» может быть лямбда-выражением, функциональным объектом или просто функцией:
bool klasse_sort_by_b(const Klasse& l, const Klasse& r)
{
return l._b < r._b;
}
liste.sort(klasse_sort_by_b);
вам нужна эта реализация вида:
template<typename Compare>
void sort (Compare comp);
затем перейдите внутрь функции сравнения, например:
bool compareByA( const Klasse& first, const Klasse& second ){
return first._a < second._a;
}
тогда назовите это:
std::list<Klasse> lst;
...
lst.sort(compareByA);
lst.sort(compareByB);
http://www.cplusplus.com/reference/list/list/sort/
Вы должны написать свой собственный компаратор, пример и использование в ссылке;)
вот пример кода, как и обещал
(спасибо за конструктивную критику)
bool compare_by_b (const Klasse& first, const Klasse& second)
{
return first._b < second._b ;
}
liste.sort(compare_by_b);
Да, и все, что вам нужно сделать, это реализовать класс компаратора или перегрузить сравнение Klasse::operator<
операторы. Для справки на sort
метод, см. этот.