如何在C 中使用Lambda自动参数
How to use lambda auto parameters in C++11
我在C 中有一个代码。但是,当我在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不支持通用lambdas 。这就是Lambda参数列表中的auto
实际上代表的:一个通用参数,与函数模板中的参数相当。(请注意,const
不是这里的问题。)
注意:c 14 die 用
auto
,const auto
等支持Lambdas。您可以在此处阅读有关它的信息。
您基本上有两个选项:
-
键入正确的类型而不是
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非常通用,因此请考虑将其放在一些全球公用事业标题中。(但是,请勿
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());
我知道有一个接受的答案,但是您也可以在C 11中使用decltype
为此,看起来有些混乱...
stable_sort(X.rbegin(), X.rend(), [](decltype(*X.cbegin()) lhs, decltype(lhs) rhs) { return lhs.first < rhs.first; });
当您获得容器的句子正确value_type
时,请在此处使用cbegin()
。
不幸的是,服用auto
(是否const
)的通用lambdas仅是C 14功能。
请参阅此处https://isocpp.org/wiki/faq/cpp14-language#generic-lambdas,以获取更多详细信息。
另外,您可以直接使用具有decltype
的容器的value_type
Typedef,例如
std::stable_sort(X.rbegin(), X.rend(),
[](const decltype(X)::value_type & lhs,
const decltype(X)::value_type & rhs)
{return lhs.first < rhs.first; }
);
const auto
在C 11中不支持lambda参数(C 11中不支持通用lambdas)。
修复:
using pair_type = std::pair<double, std::vector<int>>;
vector<pair_type> X;
std::stable_sort(X.rbegin(), X.rend(),
[](const pair_type&lhs, const pair_type& rhs)
{ return lhs.first < rhs.first; });
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 使用自动推导的 lambda 参数作为常量表达式
- 如何参数化用作另一个 lambda 参数的 lambda
- 有没有办法根据 lambda 参数返回类型部分专用化我的模板化函数?
- 从成员函数签名中自动推导lambda参数
- Clang声称通用lambda参数的constexpr成员不是constexpr
- 如果我的模板类型首先以lambda参数而发生,则MSVC会引起一个奇怪的错误
- 继承类中没有匹配的泛型委托作为 lambda 参数
- 为什么在lambda参数中不允许自动
- 如何定义通用 lambda 参数的模板参数?
- 在 QGraphicsScene 中拖动 QPixmap:如何避免 lambda 参数中不允许'auto'
- variadic模板函数会以相反的顺序调用lambda参数
- 可变模板lambda参数的模板推导
- 嵌套模板功能中的C 0x lambda参数
- 带有 std::函数和 lambda 参数的分段错误
- 从值捕获的变量分配到lambda参数时,GCC编译器分割故障
- 标准::p空气的通用 lambda 参数
- C++ lambda 参数列表
- 我的 lambda 参数真的在阴影我的当地人吗?
- 从常量和引用的角度来看,函数应该如何接受*lambda*参数