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

Compiler Error on std::sort function (GCC 4.4)

本文关键字:GCC 错误 sort 函数 std 编译器      更新时间:2023-10-16

成功地在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,但是它仍然需要您启用包括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选项的错误