C++ unordered_map 自定义key

C++ unordered_map 自定义key

flyfish

调试环境 VC++2017

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

返回数据类型T哈希值

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

例如

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

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

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

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

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

实现文件

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

放置一个文件的写法

#pragma once
class Node
{
public:
    friend struct std::hash;
public:
    int a;
    int b;
};
namespace std 
{

    template <>
    struct std::hash
    {

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

你可能感兴趣的:(C++)