C++11 如何实现std::shared的std::hash函数的专门化\u ptr<;T>;类型
以下连结: 让我想想,默认情况下(没有为ptime类型编码合适的运算符()),我们不能用C++11 如何实现std::shared的std::hash函数的专门化\u ptr<;T>;类型,c++11,hash,C++11,Hash,以下连结: 让我想想,默认情况下(没有为ptime类型编码合适的运算符()),我们不能用boost::posix::ptime类型作为键来创建std::unordered_map,但我们可以用std::shared_ptr类型来创建它,是真的吗 如何实现共享\u ptr的哈希函数?哈希函数的输入是原始地址0xCBA。。。基础指针的值,并输出相应的哈希值 std::map根本不使用std::hash;我相信你是在想std::unordered\u map std::shared_ptr的std::
boost::posix::ptime
类型作为键来创建std::unordered_map
,但我们可以用std::shared_ptr
类型来创建它,是真的吗
如何实现共享\u ptr的哈希函数?哈希函数的输入是原始地址0xCBA。。。基础指针的值,并输出相应的哈希值
std::map
根本不使用std::hash
;我相信你是在想std::unordered\u map
std::shared_ptr
的std::hash
的部分专门化是通过对指针值而不是指向的值进行散列来实现的。它与通过散列存储在共享\u ptr
中的原始指针得到的散列相同boost::posix::ptime
键控的std::unordered_映射。您有两个选项:专门化std::hash
,或者向std::无序_映射提供您自己的has functor
:
struct TimeHash {
std::size_t operator() (const boost::posix::ptime &t) const
{ return /* whatever */; }
};
std::unordered_map<boost::posix::ptime, AnyValueType, TimeHash> myMap;
struct TimeHash{
std::size\u t操作符()(常量boost::posix::ptime&t)常量
{return/*无论什么*/;}
};
std::无序图myMap;
关于编辑:标准规定的所有内容都是
std::hash()(sp)==std::hash()(sp.get())
有效。换句话说,这意味着散列一个std::shared_ptr
散列存储在其中的指针(例如,不是控制块)。指针的散列方式完全取决于实现,即取决于您的标准库供应商。Angew:我的最后一个问题是:共享\u ptr的散列函数如何?输入是原始地址0xCBA。。。输出相应的散列值?Angew:我已经对我的问题进行了大量编辑,这正是我想知道的。@Guillaume07扩展了答案。