我想存储在包装网络连接的地图对象中,其中键应该是IP地址+端口号。
我的问题是我应该如何处理带有两个元素的这样的键?
我可以定义std::unordered_map<std::pair<std::string, uint16_t>, Connection>
,但我不确定应该如何为其实现哈希对象。我想到的只有幼稚的实现:
std::size_t operator() (const pair<std::string, uint16_t>& key) const
{
std::hash<std::string> ip_hash;
std::hash<uint16_t> port_hash;
return ip_hash (key.first) + port_hash (port.second);
}
我认为简单地添加两个哈希值是相当糟糕的主意。在实现哈希函数时,我应该遵守什么一般规则吗?
(我知道,我可以从 IP 地址和端口号构建一个字符串,但我只是好奇)。
如果可以选择使用升压,boost::hash_combine使这变得非常容易(否则可以在链接页面上实现该实现)。
std::size_t operator()(const pair<std::string, uint16_t>& key) const
{
std::size_t seed = 0;
boost::hash_combine(seed, key.first);
boost::hash_combine(seed, key.second);
return seed;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)