c ++ найти позицию бина значения (гистограмма)

Я новичок в C ++, поэтому я заранее извиняюсь за небрежное программирование. У меня есть вектор вероятностей и еще один из xvalues. Что мне нужно сделать, чтобы накапливать вероятности, чтобы получить гистограмму с растущим числом, а затем сгенерировать случайное равномерное число и найти положение, в котором оно падает в xvales (ind в функции исторических функций Matlab — [bincounts, ind] = histc ( ___) -). В конце концов мне нужно сделать это для вектора случайных чисел, но я подумал, что нужно пометить звездой только одно число. Это то, что я до сих пор:

int main() {
double nale=0;
nale = rand_uniforme_1(0,1); // function that creates a uniform random nunber (it works already)

double vx[] = {2,4,6,8};
std::vector<double> valorx(vx, vx+4);

double vp[]={0.2,0.3,0.1,0.4};
std::vector<double> probab(vp, vp+4);

// acumulate
std::vector<double> proacum1(probab.size());
std::partial_sum (probab.begin(), probab.end(), proacum1);

// add a 0 at the beggining
std::vector<double> proacum(probab.size()+1);
proacum[0]=0;
for (int i = 0; i < proacum1.size(); ++i) {
proacum[i+1]=proacum1[i];
}

// position of the uniform random number
std::vector<double>::iterator low;
low=std::lower_bound (proacum.begin(), proacum.end(), nale);
int pos=(low- proacum.begin());double value=valorx[pos];

std::cout << nale << "\n";
std::cout << value << "\n";

}

Это дает мне ошибки:

-error: no viable overloaded '=' in low=std::lower_bound (proacum.begin(), proacum.end(), nale);
-n instantiation of function template
specialization 'std::__1::partial_sum<std::__1::__wrap_iter<double *>,
std::__1::vector<double, std::__1::allocator<double> > >' requested here
std::partial_sum (probab.begin(), probab.end(), proacum1);

и больше того, чего я даже не понимаю.

-1

Решение

int pos=(low- proacum.begin());

Разыщите это. Вы назначаете итератор для int.

Я не могу проверить это, потому что у меня нет всех используемых библиотек и объявлений функций, но я верю

int pos = *(low - proacum.begin)

Должно работать просто отлично.

-1

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

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