algorithm - 向量中的最小值,跳过一些索引

标签 algorithm c++11 minimum

我有一个 double 向量,需要知道向量中最小值的索引和值。这很容易通过算法头完成,但是我需要忽略一些索引。

只删除索引是行不通的,因为我需要原始索引。另一种选择是向所有必须跳过的值添加一个常量,以便它们肯定不是最小值。然而,这似乎效率很低。

目前我有以下函数,其中我仍然必须跳过 except 中给出的索引。我尝试找到 d_distance最小值

pair<size_t, double> City::closest(vector<size_t> const &except) const
{ 
  auto min_el = min_element(d_distance.begin(), d_distance.end());
  size_t idx = distance(d_distance.begin(), min_el) + 1;

  return make_pair(idx, *min_el);
}

请注意,我的问题与 this question 不同因为他想跳过某些值而不是索引。

最佳答案

您可以明确地遍历向量并忽略索引。这是如何完成的:

std::pair<size_t, double> closest(
   std::vector<double> const & distance, 
   std::vector<size_t> const & except)
{
   auto min = std::numeric_limits<double>::max();
   auto pos = static_cast<size_t>(-1);

   auto pos_except = size_t{0};
   for(size_t i = 0; i < distance.size(); ++i)
   {
      if(pos_except < except.size() && i == except[pos_except])
         pos_except++;
      else
      {
         if(distance[i] < min)
         {
            min = distance[i];
            pos = i;
         }
      }
   }

   return std::make_pair(pos, min);
}

int main()
{
   auto distance = std::vector<double> {10.0, 2.5, 0.5, 4.5, 8.0, 17.2, 10.1};
   auto except = std::vector<size_t> {0, 2, 5};

   auto result = closest(distance, except);

   return 0;
}

关于algorithm - 向量中的最小值,跳过一些索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28753815/

相关文章:

php - 非循环劳动力调度算法

c++ - OpenCV高斯曲线拟合

python - 在三个二维子矩阵中按元素查找最小值

python - Python 中非 None 的最小数字

html - 定义背景图像的最小宽度

algorithm - 检查矩阵中重复行的高效算法

algorithm - 计算 __mm256 向量中非零条目数的最快方法是什么?

c++ - 理解为什么编译时 bool 代数不起作用

c++ - 存在 lambda 参数时 ADL 失败?

c++ - 带有标准容器的 unique_ptr : attempting to reference a deleted function