Усреднение значения вокруг пика гистограммы с использованием std :: map - PullRequest
0 голосов
/ 25 апреля 2018

Я пытаюсь усреднить ключи вокруг пика гистограммы.Итак, я сначала нахожу пик, а затем попытался добавить один и вычесть один из индекса пика, чтобы найти средний ключ вокруг пика.Я нахожу индекс, используя функцию расстояния.Однако я не могу найти правильное решение, потому что код не будет компилироваться.Может кто-нибудь, пожалуйста, помогите?

int iterator_distance;

for ( std::map<float, int>::iterator it = histogram_x.begin(); it != histogram_x.end(); it++) {
    if (max_occurence.x <= it->second ) {
        max_occurence.x = it->second;
        max_voted.x = it->first;
        iterator_distance = std::distance(histogram_x.begin(), it);
        //std::cout << x.first << " histogram " << x.second << "endx\n";
    }
}
// Average around the peak

if ( iterator_distance > 2 ) {
    max_voted.x = (histogram_x.begin()+iterator_distance-1)->first + (histogram_x.begin()+iterator_distance)->first + (histogram_x.begin()+iterator_distance+1)->first;
}

Следующая ошибка.Ошибка говорит о том, что оператор плюс нельзя использовать с итераторами и с плавающей точкой.Но это мой вопрос, как я могу решить эту проблему?

error: no match for ‘operator+’ (operand types are ‘std::map<float, int>::iterator {aka std::_Rb_tree_iterator<std::pair<const float, int> >}’ and ‘int’)
                 max_voted.x = (histogram_x.begin()+iterator_distance)->first +  (histogram_x.begin()+iterator_distance-1)->first;

1 Ответ

0 голосов
/ 25 апреля 2018

Это должно работать в C ++ 11:

assert(histogram_x.size() > 0);
auto peak_it = std::max_element(histogram_x.cbegin(), histogram_x.cend(),
   [](const pair<float, int>& lhs, const pair<float, int>& rhs) {
      reutrn lhs.second < rhs.second; });

max_voted.x = peak_it->first;    
if ((peak_it != histogram_x.begin()) && (peak_it != std::prev(histogram_x.end())) 
   max_voted.x += std::prev(peak_it)->first + std::next(peak_it)->first /* / 3.0f ??? */;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...