gpt4 book ai didi

c++ - 如何创建一个 unordered_set 的 shared_ptr 对象?

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:27:20 28 4
gpt4 key购买 nike

我正在使用 Visual Studio 2012。当我尝试这个时:

std::unordered_set<std::shared_ptr<A>> myset;

我收到这个错误:

error C2338: The C++ Standard doesn't provide a hash for this type.

根据标准和此错误报告 (https://connect.microsoft.com/VisualStudio/feedback/details/734888#tabs),这应该可以编译并且 Microsoft 已在 VC++11 中实现了支持。那为什么这行不通呢?

编辑:我如何进行这项工作?我已经尝试了链接页面上的解决方法,它只是给我一个错误,说散列函数已经被定义了。果然,在VC目录下的“memory”文件的第1803行是这样的:

template<class _Ty>
struct hash<shared_ptr<_Ty> >
: public unary_function<shared_ptr<_Ty>, size_t>
{ // hash functor
typedef shared_ptr<_Ty> _Kty;
typedef _Ty *_Ptrtype;

size_t operator()(const _Kty& _Keyval) const
{ // hash _Keyval to size_t value by pseudorandomizing transform
return (hash<_Ptrtype>()(_Keyval.get()));
}
};

我通常不愿意责怪编译器,因为这通常是我的错,但这次看起来他们真的搞砸了......

最佳答案

我猜你的 MSVC 版本不支持它,但在你链接的页面上的“解决方法”选项卡中有一个似乎可用的解决方法。基本上,您只需为此类型(在此编译器上)自己实现 std::hash

关于c++ - 如何创建一个 unordered_set 的 shared_ptr 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17274799/

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