自己的类型作为unordered_map中的键

问题描述 投票:0回答:1

我有一个围绕 uint32_t 的包装类:

class IPv4 
{ 
  uint32_t octets_;
public:
  operator uint32_t() {return octets;} 
};

我还有一个继承自 IPv4 类的结构:

struct routerID : public IPv4 
{};

我想创建一个 unordered_map:

std::unordered_map<RouterID, std::string> routers;

但是我遇到了一个错误:尝试引用已删除的函数。

有没有一种方法可以使其工作而无需为我的 IPv4 类显式定义 hash_function 和 == ?

c++ hash transparent unordered-map
1个回答
0
投票

只需添加愚蠢的哈希值即可。尝试最小化代码行没有任何好处。

#include <unordered_map>
#include <cstdint>
#include <string>

class IPv4
{
  uint32_t octets_;
public:
  operator uint32_t() const {return octets_;}
};

struct RouterID : public IPv4
{};

template <> struct std::hash<RouterID>
{
    std::size_t operator()(const RouterID& routerId) const noexcept
    {
        return std::hash<uint32_t>{}(routerId);
    }
};

std::unordered_map<RouterID, std::string> routers;
© www.soinside.com 2019 - 2024. All rights reserved.