我有一个
std::vector<double> v;
我希望检测到其中存在真实值,最高可达
的错误容差级别 1e-6;
The documentation表示operator==
用于查找容器中是否存在值。
如何在双打中生成我需要的行为?
答案 0 :(得分:9)
您不能使用普通find
来搜索自定义比较器 - 您需要使用find_if
。你已经有了C ++ 11的答案,这里有一个用于C ++ 03的答案:
struct dbl_cmp {
dbl_cmp(double v, double d) : val(v), delta(d) { }
inline bool operator()(const double &x) const {
return abs(x-val) < delta;
}
private:
double val, delta;
};
...
find_if(v.begin(), v.end(), dbl_cmp(10.5, 1E-8));
答案 1 :(得分:7)
你可以像这样接近它。
double a=3.14; // The value you seek
std::find_if(v.begin(),v.end(),[a](double b) { return abs(a - b) < epsilon; });
浮点人员可能会有比我在这里提供的更好的等效比较方法。