Идеальный генератор хеш-функций для функций

У меня есть набор функций C ++. Я хочу отобразить эти функции в хэш-таблице, что-то вроде:unordered_map<function<ReturnType (Args...)> , SomethingElse>, гдеSomethingElse не имеет отношения к этому вопросу.

Этот набор функций ранее известен, маленький (скажем, менее 50) и статический (не изменится).

Поскольку производительность поиска имеет решающее значение (должно быть выполнено вO(1)), Я хочу определить идеальную функцию хеширования.

Существует ли идеальный генератор хеш-функций для этого сценария?

Я знаю, что существуют совершенные генераторы хеш-функций (например,Gperf или жеCMPH) но так как я никогда не использовал их, я не знаю, подходят ли они для моего случая.

ПРИЧИНА:

Я пытаюсь разработать структуру, где, учитывая программу, написанную на C ++, пользователь может выбрать подмножествоF функций, определенных в этой программе.

Для каждогоf принадлежность кF, структура реализуетмемоизации стратегия: когда мы называемf с вводомiмы храним(i,o) внутри некоторой структуры данных. Итак, если мы собираемся позвонить сноваf сi, мы вернемсяo без повторного выполнения (дорогостоящего времени) вычисления.

«Уже вычисленные результаты» будут доступны для разных пользователей (возможно, в облаке), поэтому, если пользовательu1 уже вычислилoпользовательu2 сэкономит время на вычисленияf сi (используя ту же аннотацию до).

Очевидно, нам нужно хранить множество пар(f,inputs_sets) (гдеinputs_sets это уже вычисленный набор результатов, о котором я говорил ранее),это оригинальный вопрос: как мне это сделать?

Таким образом, использование «трюка перечисления», предложенного в комментариях к этому сценарию, могло бы стать решением, предполагая, что все пользователи используютточно такой же перечисление, что может быть проблемой: предположим, что наша программа имеетf1,f2,f3 что, еслиu1 хочет запомнить толькоf1 а такжеf2 (такF={f1,f2}), в то время какu2 хочет запомнить толькоf3 (такF={f3})? Решением излишней может быть перечисление всех функций, определенных в программе, но это может привести к огромным потерям памяти.

Ответы на вопрос(1)

Ваш ответ на вопрос