Я пытаюсь использовать unordered_map с тремя целыми знаками в качестве ключа (это потому, что я хочу использовать tubb concurrent_unordered_map).Хеширующая функция для трех подписи целых чисел
я соединял эту маленькую функцию (3x16-битную => 64-разрядная версия):
// to hash
int64_t result = int16_t(x);
result = int64_t(result << 16) + int16_t(y);
result = int64_t(result << 16) + int16_t(z);
// from hash
int16_t x_ = int16_t(result >> 32);
int16_t y_ = int16_t(result >> 16);
int16_t z_ = int16_t(result & 0xFFFF);
Это не работает, какая ошибка я сделал здесь?
Мое распределение чисел таково, что отрицательное или положительное число ближе к нулю более вероятно (обычно меньше +/- 2^8), но я хотел бы расширить его для работы с диапазоном до 2^32 , а не мой пример здесь. В идеале, я ищу очень мало столкновений в типичном диапазоне и предпочтительно простой алгоритм. Какие-либо предложения?
Как это не работает? – imreal