Вот хеш-функция C (++), которую я нашел в книге Страуструпа:
int hash(const char *str)
{
int h = 0;
while (*str)
h = h << 1 ^ *str++;
return h;
}
Если вы используете его для хеш-таблицы (что делает Страуструп), вы можете вместо этого вернуть абсолютное значение хэша по простому числу. Так что вместо
return (h > 0 ? h : -h) % N_BUCKETS;
для последней строки.