向量子集的最小值(c ++)

Mic*_*oek 2 c++ algorithm

我需要a中最小值的索引vector<int>,但是只有一些索引必须考虑在内.说我们有:

vector<int> distance({5, 5, 4, 3, 5});
vector<int> neighbors({0, 1, 2, 4});
Run Code Online (Sandbox Code Playgroud)

然后不考虑值3,因此4是最小值,因此我需要索引2.可以通过向未考虑的值添加大常量来解决它:

int City::closest(set<int> const &neighbors) const
{
  vector<double> dist(d_distance);
  for (size_t idx = 0; idx != dist.size(); ++idx)
  {
    auto it = find(neighbors.begin(), neighbors.end(), idx);
    if (it == neighbors.end())
      dist[idx] = __INT_MAX__;
  }

  auto min_el = min_element(dist.begin(), dist.end());
  return distance(dist.begin(), min_el);
}
Run Code Online (Sandbox Code Playgroud)

但是我认为这种方法不可读,我更喜欢STL算法或其中两种的组合.你有一个更整洁的解决方案吗?

eca*_*mur 5

使用min_element比较器的变体,并neighbors用作范围和distance成本函数:

return *min_element(neighbors.begin(), neighbors.end(),
    [&](int i, int j) { return distance[i] < distance[j]; });
Run Code Online (Sandbox Code Playgroud)