C ++ список :: сортировка классов по членам

Как я могу отсортировать список классов по определенной переменной-члену?

class Klasse {
int _a;
int _b;

}

...
list<Klasse> liste;
liste.sort();   // sorts by _a
liste.sort(?);  // how to sort by _b now?

1

Решение

Вы бы использовали объект сравнения. Вот пример использования лямбда.

std::list<Klasse> liste;
liste.sort([](Klasse const & lhs, Klasse const & rhs) {
return lhs._b < rhs._b;
});
4

Другие решения

Смотрите ссылку.

Вы можете написать функцию сравнения — в основном все, что может быть вызвано с двумя аргументами типа элемента вашего списка, и этот вызов возвращает значение, конвертируемое в bool, Такое «что угодно» может быть лямбда-выражением, функциональным объектом или просто функцией:

bool klasse_sort_by_b(const Klasse& l, const Klasse& r)
{
return l._b < r._b;
}

liste.sort(klasse_sort_by_b);
3

вам нужна эта реализация вида:

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);
1

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);
0

Да, и все, что вам нужно сделать, это реализовать класс компаратора или перегрузить сравнение Klasse::operator< операторы. Для справки на sort метод, см. этот.

-1
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector