C++11 如何实现std::shared的std::hash函数的专门化\u ptr<;T>;类型

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::

以下连结:

让我想想,默认情况下(没有为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::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扩展了答案。