我在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。那就是auto
lambda的参数列表中的实际含义:通用参数,与功能模板中的参数相当。(请注意,这const
不是问题所在。)
注:C ++ 14不与支持lambda表达式
auto
,const auto
等等。你可以阅读有关它在这里。
您基本上有两种选择:
输入正确的类型而不是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; });
将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] 删除。
我来说两句