Я заметил, что некоторые реализации C ++ std :: hash используют алгоритм FNV1a, но это не зависит от языка.
Одна вещь, которую я нахожу странной, состоит в том, что алгоритм обрабатывает 1 байт данных на каждую итерацию цикла.
hash = FNV_offset_basis
for each byte_of_data to be hashed
hash = hash XOR byte_of_data
hash = hash × FNV_prime
return hash
Интересно, почему алгоритм не обрабатывает 4 или 8 байтов данных за цикл и возвращается к обработке байтов за последние несколько байтов (если длина диапазона не кратна 4 или 8).