std :: sort函数的编译器错误(GCC 4.4)

时间:2016-12-08 12:54:22

标签: c++ c++11 lambda gcc4.4

以下代码在Visual Studio中成功排序。
但是,在Ubuntu GCC 4.4.7编译器抛出错误。它似乎不熟悉这种语法。 如何修复此行以使代码在GCC中运行? (编译器是远程的。所以我也无法升级GCC版本)。 我在这里做的是:对有关其适合度值的Vector 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 ++并不熟悉。

1 个答案:

答案 0 :(得分: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选项

的情况下出错