【发布时间】:2017-10-11 08:50:24
【问题描述】:
我在 boost 变体中有两个结构,variant 是 boost::unordered_map 的关键。我正在寻找实现哈希和等于方法的解决方案,该方法将采用变体中的结构。 下面是一个实现的 RouteHasher 方法(它在运行时不起作用(相同的键参数不会从映射中获取值)。如何实现一个将结构的两个成员都用于哈希的哈希?
struct v4RouteKey_t
{
uint8 ipv4[4];
uint32 val;
}
struct v6RouteKey_t
{
uint8 ipv6[16];
uint32 val;
}
typedef boost::variant < v4RouteKey_t, v6RouteKey_t > RouteKey;
typedef boost::unordered_map < RouteKey, RouteValue_t > RouteMap;
struct RouteHasher : public boost::static_visitor<std::size_t>
{
template<typename T>
std::size_t operator()(const T& x) const { return boost::hash<T>()(x); }
std::size_t operator()(const RouteKey& x) const { return
boost::apply_visitor(RouteHasher(), x); }
};
struct RouteEquals : public boost::static_visitor<bool>
{
template<typename T>
bool operator()(const T& lhs, const T& rhs) const { return lhs == rhs; }
template<typename T1, typename T2>
bool operator()(const T1& lhs, const T2& rhs) const { return false; }
bool operator()(const RouteKey& lhs, const RouteKey& rhs) const
{ return boost::apply_visitor(RouteEquals(), lhs, rhs); }
};
【问题讨论】:
-
“哪个不起作用” - 为什么?编译器错误?运行时错误?
-
更新了帖子。
-
你使用的是哪个标准的c++?
标签: c++ boost unordered-map variant