Generador de funciones hash perfecto para funciones

Tengo un conjunto de funciones de C ++. Quiero asignar estas funciones en una tabla hash, algo así como:unordered_map<function<ReturnType (Args...)> , SomethingElse>, dóndeSomethingElse no es relevante para esta pregunta.

Este conjunto de funciones es conocido anteriormente, pequeño (digamos menos de 50) y estático (no va a cambiar).

Dado que el rendimiento de búsqueda es crucial (debe realizarse enO(1)), Quiero definir una función de hashing perfecta.

¿Existe un generador de funciones hash perfecto para este escenario?

Sé que existen generadores de funciones de hashing perfectas (comoGPERF oCMPH) pero como nunca los he usado, no sé si son adecuados para mi caso.

RAZÓN:

Estoy tratando de diseñar un marco donde, dado un programa escrito en C ++, el usuario puede seleccionar un subconjuntoF de las funciones definidas en este programa.

Para cadaf perteneciendo aF, el marco implementa unmemorización estrategia: cuando llamamosf con entradai, almacenamos(i,o) dentro de alguna estructura de datos. Entonces, si vamos a llamar OTRA VEZf coni, volveremoso sin volver a realizar el cálculo (costoso).

Los "resultados ya calculados" se compartirán entre diferentes usuarios (tal vez en la nube), por lo que si el usuariou1 ya ha calculadoousuariou2 ahorrará tiempo de computación llamandof coni (usando la misma anotación de antes).

Obviamente, necesitamos almacenar el conjunto de pares.(f,inputs_sets) (dóndeinputs_sets es el conjunto de resultados ya calculado que hablé antes),cuál es la pregunta original: ¿cómo lo hago??

Por lo tanto, usar el "truco de enumeración" propuesto en los comentarios en este escenario podría ser una solución, suponiendo que todos los usuarios usen elexactamente lo mismo enumeración, que podría ser un problema: suponiendo que nuestro programa tengaf1,f2,f3 y siu1 solo quiere memorizarf1 yf2 (entoncesF={f1,f2}), mientrasu2 solo quiere memorizarf3 (entoncesF={f3})? Una solución excesiva podría ser enumerar todas las funciones definidas en el programa, pero esto podría generar una gran pérdida de memoria.

Respuestas a la pregunta(1)

Su respuesta a la pregunta