gpt4 book ai didi

c++ - 使用 lambda 表达式作为 std::set 的比较,当它在 vector 中时

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:46:30 33 4
gpt4 key购买 nike

我想使用 lambda 表达式作为 std::整数集的自定义比较。这个网站上有很多答案解释了如何做到这一点,例如 https://stackoverflow.com/a/46128321/10774939 .事实上,

#include <vector>
#include <set>
#include <iostream>

int main() {

auto different_cmp = [](int i, int j) -> bool {
return j < i;
};

std::set<int, decltype(different_cmp)> integers(different_cmp);

integers.insert(3);
integers.insert(4);
integers.insert(1);
for (int integer : integers) {
std::cout << integer << " ";
}

return 0;
}

编译输出

4 3 1

如预期。但是,当我尝试将此集合放入 vector 中时

    std::vector<std::set<int, decltype(different_cmp)>> vec_of_integers;
vec_of_integers.push_back(integers);

编译器报错。我使用的是 Visual Studio 2017,根据周围的代码,我得到了不同的编译器错误。在上面的例子中,它是

1>c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.16.27023\include\utility(77): error C2664: 'void std::swap(std::exception_ptr &,std::exception_ptr &) noexcept': cannot convert argument 1 from '_Ty' to 'std::exception_ptr &'
1> with
1> [
1> _Ty=main::<lambda_48847b4f831139ed92f5310c6e06eea1>
1> ]

到目前为止,我看到的大多数错误似乎都与复制集合有关。

所以我的问题是:

Why does the above code not work and how can I make it work, while still using a locally defined lambda?

最佳答案

这似乎是 MS 编译器中的一个错误,因为它可以很好地与 GCC 和 Clang 编译。

要使其在 MS Compiler (Visual Studio 2017) 中运行,您可以这样做:

std::vector<std::set<int, decltype(different_cmp)>> vec_of_integers{integers};

这编译干净。参见 here .

关于c++ - 使用 lambda 表达式作为 std::set 的比较,当它在 vector 中时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53721680/

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