gpt4 book ai didi

c++ - 如何在 C++11 中使用 lambda 自动参数

转载 作者:IT老高 更新时间:2023-10-28 12:52:53 28 4
gpt4 key购买 nike

我有一个 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 不支持通用 lambdas。就是这样 auto在 lambda 的参数列表中实际上代表:泛型参数,可与函数模板中的参数相媲美。 (注意 const 不是这里的问题。)

Note: C++14 does support lambdas with auto, const auto, etc. You can read about it here.

你基本上有两种选择:

  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 非常通用,因此请考虑将其放在一些全局实用程序 header 中。 (但是不要 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++ - 如何在 C++11 中使用 lambda 自动参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30071453/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com