gpt4 book ai didi

c++ - std::unordered_map 和由多个元素构建的键

转载 作者:太空狗 更新时间:2023-10-29 21:44:24 25 4
gpt4 key购买 nike

我想在映射对象中存储网络连接,其中键应该是 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,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;
}

关于c++ - std::unordered_map 和由多个元素构建的键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20230168/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com