C++ unordered_map 自定义key

来源:互联网 发布:网络英语教学 编辑:程序博客网 时间:2024/06/03 14:22

C++ unordered_map 自定义key

flyfish

调试环境 VC++2017

自定义key主要是自定义类型的std::hash 的偏特化(specialization)

返回数据类型T哈希值

C++11为所有基本类型都提供了specialization实现

例如

std::hash<std::string>std::hash<std::wstring>

假设使用基本类似
std::unordered_map<string,string> map;
因为C++已经提供了基本类型key的hash 所以直接声明就可以使用

如果是我们自定义的类,就需要提供std::hash specialization的实现

头文件与实现文件分开的写法
头文件

#pragma onceclass Node;namespace std{    template <>     struct hash<Node>     {        int operator()(const Node&) const;    };}class Node{public:    friend struct std::hash<Node>;public:    int a;    int b;};

实现文件

namespace std {    int hash<Node>::operator()(const Node& v) const     {        return std::hash<int>{}(v.a);    }}

放置一个文件的写法

#pragma onceclass Node{public:    friend struct std::hash<Node>;public:    int a;    int b;};namespace std {    template <>    struct std::hash<Node>    {        int operator()(const Node& v) const        {            return std::hash<int>{}(v.a);        }    };}
原创粉丝点击