以下代码在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 ++并不熟悉。
答案 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
选项