C++ C++;使用lambda错误进行排序

C++ C++;使用lambda错误进行排序,c++,lambda,C++,Lambda,我正在尝试使用lambda对数组进行排序,以便在比较函数中使用另一个数组。在一个更大的函数中,我有以下代码: std::sort(arr.begin(), arr.end(),[] (int& a, int& b) { return (*i)[a] < (*i)[b]; }); 编译时,我还包括-std=c++0x选项 我对发生的事感到困惑。出于某种原因,它似乎无法识别我的语法是否有效。为了以防万一,我做了一个yum更新,但它似乎仍然不认识la

我正在尝试使用lambda对数组进行排序,以便在比较函数中使用另一个数组。在一个更大的函数中,我有以下代码:

std::sort(arr.begin(), arr.end(),[] (int& a, int& b)
{       
    return (*i)[a] < (*i)[b];
});   
编译时,我还包括-std=c++0x选项


我对发生的事感到困惑。出于某种原因,它似乎无法识别我的语法是否有效。为了以防万一,我做了一个yum更新,但它似乎仍然不认识lambdas的用法。

C++11 lambdas需要GCC/G++4.5至少,它们不能与G++4.4一起使用


请参阅(或者,因为它现在已关闭)。

从您的I'm include the-std=c++0x选项注释中,我推测您正在使用G++,所以问题是究竟是哪个版本的G++?并不是每个人都支持lambdas。请参阅(此页面包含有关每个G++版本的C++11兼容性的信息,我定期查阅,但不知何故,该站点现在似乎已关闭--请稍后重试)。在闭包参数之后,您似乎缺少一个paren。@syam我安装了V4.4.7GCC。我认为g++只是运行gcc的cpp命令。我刚刚做了一个yum更新,所以我应该有最新的gcc@bchurchill,具体在哪里?我好像找不到。不,我搞错了。没有语法错误。它几乎可以用我的g++版本4.6.3编译find——不过你需要在闭包中捕获i(例如,把它放在方括号中)。谢谢。刚刚也发现了相关的问题。我认为CentOS 6在gcc中会有lambda支持,但我想不会。@saccharine我对CentOS不太了解,但您可能可以从“测试”存储库而不是常规的“稳定”存储库安装更新的gcc版本(对不起Debian的措词;)您明白我的意思了。我有g++4.7和4.8在Squence上运行(默认情况下是Debian stable,GCC 4.4),只进行了非常小的升级。std::addressof也有同样的问题吗?我之所以使用g++4.4,是因为CUDA需要它,但我的程序没有看到std::addressof,我看到在4.4文件中这不存在,只有在我的4.7中dirs@cf16你的问题似乎已经包含了答案
mcmc.cpp:139: error: expected primary-expression before ‘[’ token
mcmc.cpp:139: error: expected primary-expression before ‘]’ token
mcmc.cpp:139: error: expected primary-expression before ‘int’
mcmc.cpp:139: error: expected primary-expression before ‘int’