Я хочу использовать std::find_if
с неравенством в условии для std::vector<std::vector<double> >
.
Например, - здесь у меня есть матрица M в Matlab (в C ++ я создал вектор векторов M[i][j]
, где i
- столбец (вектор), а j
- строка (векторы) с элементами).
Тогда я хочу реализовать в C ++ то, что у меня есть в Matlab:
for j = 2:(sz - 1) % (sz - 1) = M.size()
k1 = j - find(M(j, 1:j - 1) > L, 1, 'last'); % j - last one index in red frame
k2 = find(M(j, j + 1:end) > L, 1, 'first'); % first one index in blue frame
...
end
Здесь (M(j, 1:j - 1)
для красных рамок и M(j, j + 1:end)
для синих рамок.
Я ищу k1
в красных рамках и k2
в синих рамках. Я пытаюсь найти k1
(индекс последнего элемента выше 0
), используя std::find_if
, но я не могу понять, почему:
Работает только когда я пишу x < L
вместо x > L
Сначала я получаю 0.2877
, а не 0.4055
.
Лучше ли создать два дополнительных вектора, например M1
и M2
для
(M(j, 1:j - 1)
и M(j, j + 1:end)
? Потому что в C ++ нет оператора двоеточия. Или я могу получить то, что хочу, используя find_if
?
C ++ код:
...
for (unsigned int j = 1; j < M.size(); j++) {
auto it = std::find_if(M[j].rbegin(), M[j].rend(), [&](const double &x) -> bool {return x > L; }); // here without `j - ...`
auto f = *it2; // just for check what I get
}
...