gpt4 book ai didi

c++ - 不能将lambda用作unordered_set对的哈希?

转载 作者:行者123 更新时间:2023-12-02 10:09:55 25 4
gpt4 key购买 nike

我试图定义一个类型为unordered_setpair之上的unsigned int:

typedef std::pair<unsigned int, unsigned int> Loc;
auto HashLoc = [](const Loc &l) {
return l.first << 16 ^ l.second;
};
typedef std::unordered_set<Loc, decltype(HashLoc)> LocSet;
这基于对 creating unordered_set with lambda的公认答案。
当我尝试实际声明该类型的对象时,出现错误 error: call to implicitly-deleted default constructor of 'LocSet'。根据编译器提供的详细信息,看起来它正在尝试为lambda调用已删除的默认构造函数。
有趣的是,上面链接的答案表明VS2013就是这样做的,这是一个错误,但是gcc和clang应该可以工作。但是,我正在使用clang(8.0.1版)。这是预期的行为吗?如果是这样,执行我尝试做的事情的正确方法是什么?

最佳答案

您需要使用C++ 20模式进行编译,即使用-std=c++2a选项。
在C++ 20之前lambda闭包类型没有默认构造函数。

Closure types are not DefaultConstructible. Closure types have no default constructor (until C++20)

If no captures are specified, the closure type has a defaulted default constructor. (since C++20)

关于c++ - 不能将lambda用作unordered_set对的哈希?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64074068/

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