下面的代码应该找到问题的关键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);
}
Run Code Online (Sandbox Code Playgroud)
在上面的例子中,contains将永远是false.我目前的解决方法是乘以t0.1而不是加0.1,如下所示:
for(int i = 0; i < 31; i++)
{
t = 0.1 * i;
bool contains = (mymap.count(t) > 0);
}
Run Code Online (Sandbox Code Playgroud)
现在的问题是:
有没有办法将ifCompare引入std::mapif if use double键?浮点数比较的常见解决方案通常是这样的a-b < epsilon.但我没有看到这样做的简单方法std::map.我是否真的必须在double类中封装类型并覆盖operator<(...)以实现此功能?