Найти ближайшее значение в векторе, используя lower / upper_bound () - PullRequest
0 голосов
/ 06 января 2019

То, что я пытаюсь сделать, это перебирать вектор двойных значений и возвращать векторное положение самого близкого двойника.

При попытке найти ближайшее двойное значение в векторе, используя lower_bound(), я получаю либо значение «0», либо «144» (последнюю позицию моего вектора), независимо от того, какое двойное значение я пытаюсь найти .

Вот мой попытанный код

Попытка 1:

double Convert::convertmVtoK(double value)
{
  std::vector<double>::iterator low,up;
  low=std::lower_bound (mV.begin(), mV.end(), value);           
  up= std::upper_bound (mV.begin(), mV.end(), value);                    

  std::cout << "lower_bound at position " << (low- mV.begin()) << '\n';
  std::cout << "upper_bound at position " << (up - mV.begin()) << '\n';
}

Попытка 2:

double Convert::convertmVtoK(double value)
{
    auto it = lower_bound(mV.begin(), mV.end(), value);

    if (it == mV.begin())
    {
        it = mV.begin();
    }
    else
    {
        --it;
    }

    auto jt = upper_bound(mV.begin(), mV.end(), value), out = it;

    if (it == mV.end() || jt != mV.end() && value - *it > *jt - value)
    {
    out = jt;
    }

    cout<<"This is conversion mV to K"<<" "<< *out;
}  
...