Teclas de ponto flutuante em std: map
O código a seguir deve encontrar a chave3.0
em umstd::map
que existe. Mas, devido à precisão do ponto flutuante, ele não será encontrad
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);
}
No exemplo acima,contains
sempre seráfalse
. Minha solução atual é apenas multiplicart
por 0.1 em vez de adicionar 0.1, assim:
for(int i = 0; i < 31; i++)
{
t = 0.1 * i;
bool contains = (mymap.count(t) > 0);
}
Agora a pergunta:
Existe uma maneira de introduzir um fuzzyCompare para ostd::map
se eu usardouble
chaves? A solução comum para a comparação de números de ponto flutuante é geralmente algo comoa-b < epsilon
. Mas não vejo uma maneira direta de fazer isso comstd::map
. Eu realmente tenho que encapsular odouble
digite uma classe e substituaoperator<(...)
para implementar esta funcionalidade?