下面的代码应该找到问题的关键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
.我目前的解决方法是乘以t
0.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::map
if if use double
键?浮点数比较的常见解决方案通常是这样的a-b < epsilon
.但我没有看到这样做的简单方法std::map
.我是否真的必须在double
类中封装类型并覆盖operator<(...)
以实现此功能?