В сводке перечислены как C, так и C ++. Кого из них ты ищешь? C и C ++ - это два разных языка, и они сильно различаются по обработке строк и структурам данных (и тот факт, что C работают в C ++, это не меняет).
Почему именно вам нужна идеальная хеш-функция? Вы хотите связать строку с функцией и подумали, что это будет хорошим способом сделать это? Это какое-то домашнее задание? У вас есть причина не использовать map <> в C ++? (Или unordered_map <>, если доступно?)
Если вам нужен идеальный хеш, каковы ограничения на строки? Будет ли определенный фиксированный набор, на который вы хотите отправить? Как насчет строк, которые не соответствуют одному из набора? Готовы ли вы принимать попадания из случайных строк или количество входящих строк ограничено?
Если бы вы могли отредактировать свой вопрос, включив в него такую информацию, мы могли бы быть намного более полезными.
РЕДАКТИРОВАТЬ (в ответ на первые два комментария):
ОК, мы должны взглянуть на решения C, так как вы, вероятно, хотите, чтобы это работало как на C, так и на C ++. Вы, вероятно, хотите производительность, но вы проверяли? Если мы имеем дело со строками, поступающими в систему ввода / вывода, то время, которое там, вероятно, будет сокращать время отправки.
Вы ожидаете произвольных строк. Немного ожидать идеальной хеш-функции, которая позволит избежать всех коллизий из случайных данных, поэтому вам нужно учитывать это.
Рассматривали ли вы три ? Она может быть более эффективной, чем совершенная хеш-функция (или может не быть), ее должно быть довольно легко реализовать в C, и это позволит избежать проблем с повторением списка отправляемых строк или возможных коллизий.