2

我有一个

std::vector<double> v;

我正在寻找检测其中是否存在真实值,最高可以说是容错水平

 1e-6;

文档表明operator==用于查找容器中是否存在值。

如何生成我需要的双打行为?

4

2 回答 2

9

您不能使用 plainfind与自定义比较器进行搜索 - 您需要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));
于 2013-03-14T10:43:24.257 回答
7

你可以像这样接近它。

double a=3.14;  // The value you seek
std::find_if(v.begin(),v.end(),[a](double b) { return abs(a - b) < epsilon; });

浮点人员可能会比我在这里提供的更好的等价比较方法。

于 2013-03-14T10:39:47.057 回答