Я пытаюсь хешировать 3D-координату, чтобы создать уникальный идентификатор для индекса карты.
мой подход в настоящее время
return hash(x + hash(y + hash(z)));
Or in c++
struct ChunkHasher
{
std::size_t operator()(FLOAT3 const& vec) const
{
return std::hash<float>()(
vec.x + std::hash<float>()(
vec.y + std::hash<float>() (vec.z)
)
);
}
}chunkHasher;
но проблема в том, что я получаю много коллизий хешей... просто запускаю этот тест, и vec(0,0,0)
, и vec(-1,0,0)
сопоставляются друг с другом
Я чувствую, что это должно работать, коллизии хэшей должны происходить только в 2.32831e-08%
раз по моим приблизительным расчетам... я что-то упустил?
Редактировать: при выполнении моей программы данный ввод должен хэшироваться в один и тот же вывод всякий раз, когда вычисляется, поэтому наличие какого-то внутреннего состояния для хэша, которое изменяется при каждом вызове, невозможно.