如何在C ++ 11中使用Lambda自动参数

约翰

我在C ++ 14中有一个代码。但是,当我在C ++ 11中使用它时,它在出现错误const auto如何在C ++ 11中使用它?

vector<vector <int> > P;  
std::vector<double> f;
vector< pair<double, vector<int> > > X; 
for (int i=0;i<N;i++)
        X.push_back(make_pair(f[i],P[i]));

////Sorting fitness descending order
stable_sort(X.rbegin(), X.rend());
std::stable_sort(X.rbegin(), X.rend(),
                [](const auto&lhs, const auto& rhs) { return lhs.first < rhs.first; });
莱姆

C ++ 11不支持泛型lambda那就是autolambda的参数列表中的实际含义:通用参数,与功能模板中的参数相当。(请注意,这const不是问题所在。)

注:C ++ 14与支持lambda表达式autoconst auto等等。你可以阅读有关它在这里

您基本上有两种选择

  1. 输入正确的类型而不是auto这是的元素类型X,即pair<double, vector<int>>如果您发现此内容不可读,可以使用typedef进行帮助。

    std::stable_sort(X.rbegin(), X.rend(),
                     [](const pair<double, vector<int>> & lhs,
                        const pair<double, vector<int>> & rhs)
                     { return lhs.first < rhs.first; });
    
  2. 将lambda替换为具有呼叫操作员模板的函子这就是通用lambda在后台基本实现的方式。lambda非常通用,因此请考虑将其放在某些全局实用程序标头中。(但是,请不要using namespace std;输入std::,以防您将其放在标题中。)

    struct CompareFirst {
        template <class Fst, class Snd>
        bool operator()(const pair<Fst,Snd>& l, const pair<Fst,Snd>& r) const {
            return l.first < r.first;
        }
    };
    
    std::stable_sort(X.rbegin(), X.rend(), CompareFirst());
    

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章