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

时间:2015-05-12 15:07:30

标签: c++ algorithm

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

vector<int> distance({5, 5, 4, 3, 5});
vector<int> neighbors({0, 1, 2, 4});

然后不考虑值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);
}

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

2 个答案:

答案 0 :(得分:5)

使用比较min_element的变体,并使用neighbors作为范围,distance作为费用函数:

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

答案 1 :(得分:1)

这是你想要做的吗?

 int min=__INT_MAX__;
 int minIndex=-1;
 for(int i=0;i<neighbours.size();i++){

    if(distance[neighbours[i]]<min){
        min=distance[neighbours[i]];
        minIndex=i;
    }
}