Gerador de função hash perfeito para funções

Eu tenho um conjunto de funções C ++. Quero mapear essas funções em uma tabela de hash, algo como:unordered_map<function<ReturnType (Args...)> , SomethingElse>, OndeSomethingElse&nbsp;não é relevante para esta pergunta.

Esse conjunto de funções é conhecido anteriormente, pequeno (digamos menos de 50) e estático (não vai mudar).

Como o desempenho da pesquisa é crucial (deve ser executado emO(1)), Quero definir uma função de hash perfeita.

Existe um gerador de função de hash perfeito para esse cenário?

Eu sei que existem geradores de funções de hash perfeitas (comoGPERF&nbsp;ouCMPH) mas como nunca os usei, não sei se eles são adequados para o meu caso.

RAZÃO, MOTIVO:

Estou tentando criar uma estrutura em que, dado um programa escrito em C ++, o usuário possa selecionar um subconjuntoF&nbsp;das funções definidas neste programa.

Para cadaf&nbsp;pertencendo àF, a estrutura implementa ummemorização&nbsp;estratégia: quando chamamosf&nbsp;com entradainós armazenamos(i,o)&nbsp;dentro de alguma estrutura de dados. Então, se vamos ligar novamentef&nbsp;comi, nós vamos voltaro&nbsp;sem executar novamente o cálculo (caro).

Os "resultados já calculados" serão compartilhados entre diferentes usuários (talvez na nuvem), portanto, se o usuáriou1&nbsp;já calculouo, do utilizadoru2&nbsp;economizará tempo de computação chamandof&nbsp;comi&nbsp;(usando a mesma anotação de antes).

Obviamente, precisamos armazenar o conjunto de pares(f,inputs_sets)&nbsp;(Ondeinputs_sets&nbsp;é o conjunto de resultados já calculados que falei antes),qual é a pergunta original: como faço?

Portanto, usar o "truque de enumeração" proposto nos comentários nesse cenário pode ser uma solução, assumindo que todos os usuários usem oexatamente o mesmo&nbsp;enumeração, o que poderia ser um problema: supondo que nosso programa tenhaf1,f2,f3&nbsp;e seu1&nbsp;quer memorizar apenasf1&nbsp;ef2&nbsp;(tãoF={f1,f2}), enquantou2&nbsp;quer memorizar apenasf3&nbsp;(tãoF={f3})? Uma solução exagerada poderia ser enumerar todas as funções definidas no programa, mas isso poderia gerar um enorme desperdício de memória.