ip^port
примерно так же просто, как вы можете
это довольно прилично, так как последние несколько бит в номере IP по сути случайны (назначение ip от провайдера)
Вы можете расширить это с помощью ip^port|port>>>16
, чтобы избежать проблемы с завершением на всех 0 или 1, избегая
для IPv6 вам нужно ipv6_1^ipv6_2^ipv6_3^ipv6_4^port
(с ipv6_i
, являющимся i
th 32-битной частью)
Вы также можете сделать
int hash=17;
hash=hash*5+ip;
hash=hash*5+port;
return hash
или
int hash=17;
hash=hash*5+ipv6_1;
hash=hash*5+ipv6_2;
hash=hash*5+ipv6_3;
hash=hash*5+ipv6_4;
hash=hash*5+port;
return hash
как ваша стандартная хеш-функция, которая немного лучше, чем стандартная xor, потому что она не коммутативна, и вы можете изменить порядок, если вы чувствуете себя лучше по этому поводу