我需要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算法或其中两种的组合。你有更简洁的解决方案吗?
答案 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;
}
}