Mejor manera que si no si no si no ... para interpolación lineal

la pregunta es fácil Digamos que tienes función

double interpolate (double x);

y tienes una tabla que tiene un mapa de x-> y conocido
por ejemplo
5 15
7 18
10 22
Nota: Las tablas reales son más grandes, esto es solo un ejemplo.

así que para 8 devolvería 18 + ((8-7) / (10-7)) * (22-18) = 19.3333333

Una manera genial que encontré eshttp://www.bnikolic.co.uk/blog/cpp-map-interp.html (cuento largo, usa std :: map, key = x, value = y para x-> y pares de datos).

Si alguien pregunta cuál es la forma en el título, si no es así, en el título es básicamente:

if ((x>=5) && (x<=7))
{
//interpolate
}
else 
     if((x>=7) && x<=10)
     {
      //interpolate
     }

Entonces, ¿hay una forma más inteligente de hacerlo o de hacer un mapa de la forma actual? :)

Por cierto, prefiero soutions en C ++ pero obviamente cualquier solución de lenguaje que tenga un mapeo 1: 1 a C ++ es buena.

Respuestas a la pregunta(6)

Su respuesta a la pregunta