std :: unordered_map и ключ, построенный из нескольких элементов
Я хотел бы хранить в карте объекты, обертывающие сетевые соединения, где ключ должен быть 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-адреса и номера порта, но мне просто любопытно).