gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 10:57:26 25 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 不支持 通用 lambda .就是这样 auto在 lambda 的参数列表中实际上代表:泛型参数,可与函数模板中的参数相媲美。 (注意 const 不是这里的问题。)

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



你基本上有两个选择:
  • 输入正确的类型而不是 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 非常通用,因此请考虑将其放在一些全局实用程序 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/58569848/

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