Сортировка массива векторов в порядке убывания при использовании компаратора (C ++) - PullRequest
1 голос
/ 23 октября 2019

У меня есть вектор объектов Car *, которые указывают на объект с атрибутом id и position. Я хочу отсортировать вектор в порядке убывания по позиции (т. Е. По наивысшей позиции в векторе [0] и т. Д.).

Вот код сортировки и компаратора, приведенный ниже:

bool comparator(Car* firstObject, Car* secondObject) {
    return firstObject->get_position() > secondObject->get_position();
}

void sortingFunction(vector<Car*> arrayOfCars) {
    sort(arrayOfCars->begin(), arrayofCars->end(), comparator);
}

Я пытался использовать метод std :: reverse (), но (и я могу ошибаться) я видел его только на самом делеработает с числовыми векторами, а не с объектными векторами. Может ли перечисление быть способом использования обратного метода или есть способ для меня как-то добавить большую функциональность в функцию сортировки с помощью компаратора?

Заранее спасибо!

1 Ответ

5 голосов
/ 23 октября 2019

Функция сортировки недопустима. Для начала вектор должен быть передан по ссылке. И вектор пропускается не через указатель. Поэтому вы не можете применять оператор -> к нему.

Таким образом, определение функции будет выглядеть как

void sortingFunction( vector<Car*> &arrayOfCars ) 
{
    sort( arrayOfCars.begin(), arrayofCars.end(), comparator );
}

Компаратор может быть записан с этими незначительными изменениями

bool comparator( const Car *firstObject, const Car *secondObject) 
{
    return firstObject->get_position() > secondObject->get_position();
}

В этом случае функция-член get_position должна быть постоянной функцией-членом, которая объявляется как

T get_position() const;
                 ^^^^^ 

, где T - тип возвращаемого значения функции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...