Код ниже сортировки в Visual Studio успешно.
Но в Ubuntu GCC 4.4.7 компилятор выдает ошибку. Кажется, он не знаком с этим типом синтаксиса.
Как мне исправить эту строку, чтобы код работал в GCC? (компилятор удаленный. Поэтому я не могу обновить версию GCC).
То, что я делаю прямо здесь: сортировка элементов вектора B по их значениям пригодности
//B is a Vector of class Bird
//fitness is a double - member of Bird objects
vector<Bird> Clone = B;
sort(Clone.begin(), Clone.end(), [](Bird a, Bird b) { return a.fitness> b.fitness; });
//error: expected primary expresssion before '[' token
//error: expected primary expresssion before ']' token...
(Примечание: это 3 части компиляции строк успешно в MSVC, но не в GCC)
мой ответ
bool X_less(Bird a, Bird b) { return a.fitness > b.fitness; }
std::sort(Clone.begin(), Clone.end(), &X_less);
Вроде работает. Это функция или нет? Я не знаю его технического названия, но, похоже, оно работает. Я не очень знаком с C ++.
Вам нужно будет обновить ваш C ++, так как 4.4 слишком стар, чтобы поддерживать Lambda. У меня есть Gcc 4.8, но он все еще требует, чтобы вы включили c ++ 11, который включает в себя лямбда-функции, поэтому
$ g++ -std=c++11 x.cc
компилирует это нормально
#include <algorithm>
#include <functional>
#include <vector>
using namespace std;
int main()
{
vector<int> Clone;
sort(Clone.begin(), Clone.end(), [](int a, int b) { return a> b; });
}
но все равно выдает ошибки без -std=c++11
вариант
Других решений пока нет …