Передача итератора в унарный предикат с помощью std :: find_if

Я пытаюсь найти индекс, 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));

0

Решение

С 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; });

демонстрация

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]