以下代码应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。我当前的解决方法是乘以t0.1而不是加0.1,如下所示:
for(int i = 0; i < 31; i++)
{
t = 0.1 * i;
bool contains = (mymap.count(t) > 0);
}
现在的问题是:
std::map如果我使用double键,是否可以将FuzzyCompare引入?浮点数比较的常见解决方案通常是a-b < epsilon。但是我看不到使用来实现此目的的简单方法std::map。我是否真的必须将double类型封装在类中并重写operator<(...)才能实现此功能?
长风秋雁
慕容森
相关分类