Следующий код должен найти ключ 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<(...) для реализации этой функции?