Следующий код должен найти ключ 3.0
в std::map
, который существует. Но из-за точности с плавающей запятой он не будет найден.
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);
}
В приведенном выше примере contains
всегда будет false
.
Мое текущее обходное решение просто умножает t
на 0,1 вместо добавления 0,1, например:
for(int i = 0; i < 31; i++)
{
t = 0.1 * i;
bool contains = (mymap.count(t) > 0);
}
Теперь вопрос:
Есть ли способ ввести fuzzyCompare в std::map
, если я использую клавиши double
?
Общим решением для сравнения чисел с плавающей запятой обычно является что-то вроде a-b < epsilon
. Но я не вижу прямого способа сделать это с помощью std::map
.
Действительно ли я должен инкапсулировать тип double
в класс и перезаписать operator<(...)
для реализации этой функции?