Teclas de punto flotante en estándar: mapa
El siguiente código debe encontrar la clave3.0
en unstd::map
que existe. Pero debido a la precisión de coma flotante no se encontrará.
map<double, double> mymap;
mymap[3.0] = 1.0;
double t = 0.0;
for(int i = 0; i < 31; i++)
{
t += 0.1;
bool contains = (mymap.count(t) > 0);
}
En el ejemplo anterior,contains
siempre seráfalse
. Mi solución actual es simplemente multiplicart
por 0.1 en lugar de agregar 0.1, así:
for(int i = 0; i < 31; i++)
{
t = 0.1 * i;
bool contains = (mymap.count(t) > 0);
}
Ahora la pregunta:
Hay una manera de presentar una FuzzyCompare a lastd::map
si usodouble
¿llaves? La solución común para la comparación de números de coma flotante suele ser algo así comoa-b < epsilon
. Pero no veo una manera directa de hacer esto constd::map
. ¿Realmente tengo que encapsular ladouble
escriba una clase y sobrescribaoperator<(...)
para implementar esta funcionalidad?