#c #sorting #c 11 #vector #lambda
#c #сортировка #c 11 #вектор #лямбда
Вопрос:
Я пытаюсь написать функцию сортировки для векторов с использованием лямбда, и я видел, как это предлагалось во многих местах, но у меня всегда были проблемы с этим.
std::sort(eventvec.begin(), eventvec.end(), [](const eventamp; lhs, const eventamp; rhs) {
return lhs.getim < rhs.getim;});
У меня было несколько ошибок при его написании, а затем я как бы наложил его на функцию внутри функции, поскольку для этого требовалась статическая функция.
Функциями, объявленными в классе, являются:
double event::getut() { return unift; }
static double getim(event amp;a) { return a.getut(); }
В итоге сортировка вообще не в порядке. В атрибуте также есть отрицательные значения. Есть какие-нибудь предложения?
Комментарии:
1. Какие ошибки существуют? Я думаю, вам следует использовать
return lhs.getim() < rhs.getim();
вместо того, что вы написали.2. Вы не вызываете функцию.
return lhs.getut() < rhs.getut()
но это означает, что вам нужно сделатьgetut()
const . Вот так:double event::getut() const { return unift; }
3. @TanveerBadar, который запрашивал бы аргументы, и что мне вводить в качестве аргумента, потому что lhs.getim(lhs) не работает.
4. ошибка @RetiredNinja: передача ‘const event’ в качестве аргумента ‘this’ отбрасывает квалификаторы [-fpermissive] И ————————————————————————————— примечание: при вызове двойного события ::getut()’двойное событие::getut() ^ ~~~~
5. Вы не прочитали все, что я написал. «это означает, что вам нужно сделать getut() const . Вот так:
double event::getut() const { return unift; }
»
Ответ №1:
Вы сортируете свои события по адресу event::getim
, который одинаков для каждого события.
Я думаю, вы имеете в виду вызов функции-члена event , которая должна вызываться из const event
double event::getut() const { return unift; }
std::sort(eventvec.begin(), eventvec.end(), [](const eventamp; lhs, const eventamp; rhs) {
return lhs.getut() < rhs.getut(); });
Комментарии:
1. @wakanada вам нужно отредактировать
event::getut
, как показано на рисунке. Он должен быть доступен для вызова изconst event
2. да, понял. Спасибо