У меня два вектора. Тот, который на самом деле содержит данные (скажем, с плавающей точкой), а другой - индексы. Я хочу передать nth_element
вектор индексов, но хочу, чтобы сравнение выполнялось по вектору, который фактически содержит данные. Я думал о функторе, но я думаю, он предоставляет только оператор (). Я добился этого, сделав вектор данных глобальным, но, конечно, это нежелательно.
std::vector<float> v; // data vector (global)
bool myfunction (int i,int j) { return (v[i]<v[j]); }
int find_median(std::vector<int> &v_i)
{
size_t n = v_i.size() / 2;
nth_element(v_i.begin(), v_i.begin()+n, v_i.end(), myfunction);
return v_i[n];
}