使用std :: find_if将迭代器传递给一元谓词

时间:2018-01-29 04:49:19

标签: c++ vector unary-function

我正在尝试找到满足i的向量元素v的索引v[i] <= x < v[i + 1],其中x是给定的任意值。我正在尝试使用find_if函数,但似乎find_if传递迭代器而不是迭代器的值,因此我无法找到执行x < v[i + 1]的方法比较。有没有办法与一元谓词进行比较,设置我在下面的方式:

#include <vector>
#include <iostream>
#include <algorithm>

//Create predicate for find_if
template<typename T>
struct eq {
    eq(const T _x) : x(x) { };

    //Does not work
    bool operator()(typedef std::vector<T>::iterator it) const {  //
        return *it <= x && x < *(++it);
    }
private:
    T x;
};

//Make vector
std::vector<double> vDouble;
vDouble.push_back(1.5);
vDouble.push_back(3.1);
vDouble.push_back(12.88);
vDouble.push_back(32.4);

double elemVal = *std::find_if(vNumeric.begin(), vNumeric.end(), eq<double>(13.0));

1 个答案:

答案 0 :(得分:4)

使用std::adjacent_find,您可以执行以下操作:

const auto x = 13.0;
auto it = std::adjacent_find(v.begin(), v.end(),
                             [x](double lhs, double rhs){ return lhs <= x && x < rhs; });

Demo