我有一个围绕 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 和 == ?
只需添加愚蠢的哈希值即可。尝试最小化代码行没有任何好处。
#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;