0

下面的代码在 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++ 不太熟悉。

4

1 回答 1

2

您需要升级您的 C++,因为 4.4 太旧,无法支持 Lambda。我有 Gcc 4.8,但它仍然需要您启用包含 lambda 函数的 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选项给出错误

于 2016-12-08T14:41:58.447 回答