gpt4 book ai didi

c++ - 在 map 中使用 Lambda

转载 作者:IT老高 更新时间:2023-10-28 21:40:24 26 4
gpt4 key购买 nike

我正在尝试在 C++11 中使用 lambda 函数实现映射

std::map<int, int, [](const int&a, const int& b) { return a < b; }> test;

但是失败了

error: type/value mismatch at argument 3 in template parameter list for ‘template<class _Key, class _Tp, class _Compare, class _Alloc> class std::map’

error: expected a type, got ‘{}’

error: invalid type in declaration before ‘;’ token

有什么建议吗?

最佳答案

您需要将 lambda 的类型作为模板参数传递,而不是 lambda 本身。你想要的是这样的:

auto mycomp = [](const int&a, const int& b) { return a < b; };
std::map<int, int, decltype(mycomp)> test(mycomp);

虽然事实上,由于您的 lambda 没有捕获,它实际上可以存储在函数指针中,所以您也可以这样做:

std::map<int, int, bool(*)(const int&,const int&)>
test([](const int&a, const int& b) { return a < b; });

虽然我发现第一个更具可读性。虽然使用函数指针类型更加通用。即它可以接受与该签名匹配的任何函数指针或非捕获 lambda。但是,如果您将 lambda 更改为正在捕获,它将无法正常工作。对于更通用的版本,您可以使用 std::function,即:

std::map<int, int, std::function<bool(const int&, const int&)>>

只要签名匹配,这将适用于任何函数、lambda(是否捕获)或函数对象。

关于c++ - 在 map 中使用 Lambda,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8736997/

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