Ошибка компилятора в функции std :: sort (GCC 4.4)

Код ниже сортировки в 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 ++.

0

Решение

Вам нужно будет обновить ваш 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 вариант

2

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

Других решений пока нет …

По вопросам рекламы [email protected]