я беру хеш от иммутабельных данных, сохраняю его в u64, и затем каждый раз в имплементации Hash буду записывать в хешер эти 64 бита, то на выходе я буду получать хеш, отличный от закешированного значения даже если буду использовать один и тот же инстанс RandomState.
На первый поверхностный взгляд здесь нет проблемы, но не сломаю ли я таким образом сам алгоритм хеширования, если буду, скажем, целую структуру с такими сущностями хешировать?
А какая цель? Если нужны быстрые таблицы, возьми hasbrown
Цель сэкономить на хешировании одних и тех же копий объемных данных. У меня может быть много копий одних и тех же данных, и я не хочу для них пересчитывать хеш каждый раз.
Если у тебя много копий одних и тех же иммутабельных данных это называется Arc
Правильное решение тут сделать HashMap<MyBigKey, usize> и рядом держать Vec<Data>
Да я согласен, что это правильное решение для хешмапы. Как и с тем, что проблема коллизий вообще не так уж сильно актуальна для хешмап, о чем выше писал @Bear_Metal, и что можно в общем-то и закешировать хеш не сильно переживая о коллизиях, ну или вот сделать "арену с индексами" на коленке, как ты предлагаешь. Но я же нигде не писал, что мне хеш нужен для хешмап. Более того, он мне нужен как раз не для хешмап. ) Поэтому я и переживаю о коллизиях.
Обсуждают сегодня