Для вектора, содержащего более 5000 элементов (расстояний), каков самый быстрый способ определения наименьшего ненулевого значения? В настоящее время, у меня есть что-то наивные, как это:Поиск наименьшего числа в векторе
double distance=1E10; //I know that my distances are always less than this
for (unsigned int i=0; i< a.size(); i++){
if (a.at(i) < distance && a.at(i) != 0){
distance=a.at(i);
}
}
Я считал сортировкой вектор первый, а затем принимать первое ненулевое значение, но я надеялся, что кто-то может предложить еще быстрее оптимизированный подход.
'.at()' это плохо, имеет встроенные проверки границ, так что это будет один из самых медленных способов. – RichardPlunkett
@RichardPlunkett: Ах, я никогда об этом не думал. Хорошая точка зрения! Какие-либо предложения? Сортировка первой? – slaw
отсортирован по региону? если да, используйте lower_bound. если нет, используйте min_element для повторения. – billz