Сложность в написании сортировки, используя lambda функции
У меня есть два класса:
class A {
private:
int m;
public:
int getM() const { return m; }
}
class B {
private:
std::vector<A *> array;
public:
A *getArray(int i) const { return array[i]; }
int arraySize() const { return array.size(); }
}
Так же есть указатель на класс B, обозначим его как b.
Я хочу отсортировать массив array по уменьшению значений m. То, что написал я ожидаемо не работает:
std::sort(b->getArray(0), b->getArray(b->arraySize()), [] (std::vector<A *> a1, std::vector<A *> a2) -> bool { return a1->getM() > a2->getM(); })
Вопрос: как правильно написать эту функцию sort, используя лямбды? Я конечно могу написать отдельно компаратор, но хотелось бы с лямбдами научиться взаимодействовать.
Ответы (1 шт):
Автор решения: Harry
→ Ссылка
Добавляем в class B
std::vector<A *>& getArray() { return array; }
и сортируем
B *b;
....
sort(b->getArray().begin(),b->getArray().end(),
[](A* a, A* b){ return a->getM() > b->getM(); });
Или же в class B добавляем
void sortVector()
{
sort(array.begin(),array.end(),
[](A* a, A* b){ return a->getM() > b->getM(); });
}
и сортируем
B *b;
....
b->sortVector();