std::map 浮点键比较
使用浮点值作为 std::map 中的键可能会带来挑战,因为浮点运算固有的不精确性。一个常见问题是,使用严格相等 (==) 比较浮点键可能并不总是按预期工作,因为即使看似精确的值也可能由于精度错误而不匹配。
在给定的代码示例中,循环尝试在 std::map 中查找键 3.0,但失败,因为循环使用 = 0.1 递增搜索键,由于浮点精度不准确,这可能与预期的键值不精确匹配。
要解决此问题,您可以在程序中使用 std::set precision 函数来指定比较键时要考虑的小数位数。但是,这种方法仍然不可靠,因为它不能保证键能够精确比较。
更好的解决方案是在 std::map 中使用近似比较函数。您可以定义一个自定义比较器,使用 epsilon 阈值来确定键相等性。这允许您在一定容差内比较键,有效地忽略微小的精度差异:
struct fuzzy_double_comparator { bool operator() (const double a, const double b) const { return std::fabs(a - b) < epsilon; } };
然后可以将此比较器函数传递给 std::map 构造函数以使用近似比较:
std::map<double, double, fuzzy_double_comparator> mymap;
通过这种方法,您可以在 std::map 中找到键 3.0,即使它的实际值由于浮点精度限制而略有不同。
以上是如何将'std::map”与浮点键一起使用:比较不准确的解决方案?的详细内容。更多信息请关注PHP中文网其他相关文章!