Я учу себя c ++ и eigen за один раз, так что, возможно, это простой вопрос.
Учитывая n и 0 "<" m "<" n, и n-вектор d с плавающей точкой,Чтобы конкретизировать: </p>
VectorXf d = VectorXf::Random(n)
я хотел бы иметь m-вектор d_prim onf целых чисел, который содержит индексы всех записей d, которые меньше или равны m-й наибольшей записи d,Эффективность имеет значение.если в данных есть ничья, тогда заполнение d_prim первых m записей d, которые меньше его m-й по величине записи, вполне подходит (мне действительно нужен индекс m чисел, которые не больше, чем m ^ самая большая записьd).
Я пробовал (наивно):
float hst(VectorXf& d,int& m){
// VectorXf d = VectorXf::Random(n);
std::nth_element(d.data().begin(),d.data().begin()+m,d.data().end());
return d(m);
}
, но есть две проблемы:
- не работает
- , даже если это сработало, мне все равно придется один раз передать (копию) d, чтобы найти индексы тех записей, которые меньше d (m).Это необходимо?
Best,