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-адреса и номера порта, но мне просто любопытно).

Ответы на вопрос(3)

Ваш ответ на вопрос