小编pok*_*909的帖子

std:map中的浮点键

下面的代码应该找到问题的关键3.0std::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<(...)以实现此功能?

c++ floating-point stl

31
推荐指数
3
解决办法
2万
查看次数

标签 统计

c++ ×1

floating-point ×1

stl ×1