Teclas de ponto flutuante em std: map

O código a seguir deve encontrar a chave3.0em 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?

questionAnswers(5)

yourAnswerToTheQuestion