我需要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算法或将两者结合使用。您对此有更简洁的解决方案吗?
最佳答案
使用带有比较器的min_element
的变体,并使用neighbors
作为范围,并使用distance
作为成本函数:
return *min_element(neighbors.begin(), neighbors.end(),
[&](int i, int j) { return distance[i] < distance[j]; });
关于c++ - vector 子集的最小值(C++),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30194824/