std :: unordered_map i klucz zbudowany z wielu elementów

Chciałbym przechowywać w obiektach map owijających połączenia sieciowe, gdzie kluczem powinien być adres IP + numer portu.

Moje pytanie brzmi: jak powinienem obsługiwać taki klucz za pomocą dwóch elementów?

Mogę zdefiniowaćstd::unordered_map<std::pair<std::string, uint16_t>, Connection>, ale nie jestem pewien, jak należy zaimplementować dla niego obiekt skrótu. Przychodzi mi na myśl tylko naiwna realizacja:

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);
}

Zakładam, że proste dodanie dwóch wartości mieszania jest raczej złym pomysłem. Czy są jakieś ogólne zasady, których powinienem przestrzegać podczas implementacji funkcji skrótu?

(Wiem, że mogę zbudować ciąg z adresu IP i numeru portu, ale jestem po prostu ciekawy).

questionAnswers(3)

yourAnswerToTheQuestion