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 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 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 das funções definidas neste programa.

Para cadaf pertencendo àF, a estrutura implementa ummemorização estratégia: quando chamamosf com entradainós armazenamos(i,o) dentro de alguma estrutura de dados. Então, se vamos ligar novamentef comi, nós vamos voltaro 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 já calculouo, do utilizadoru2 economizará tempo de computação chamandof comi (usando a mesma anotação de antes).

Obviamente, precisamos armazenar o conjunto de pares(f,inputs_sets) (Ondeinputs_sets é 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 enumeração, o que poderia ser um problema: supondo que nosso programa tenhaf1,f2,f3 e seu1 quer memorizar apenasf1 ef2 (tãoF={f1,f2}), enquantou2 quer memorizar apenasf3 (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.

questionAnswers(1)

yourAnswerToTheQuestion