我有一个双精度矢量,需要知道矢量中最小值的索引和值。这很容易用算法标题完成,但是我需要忽略一些索引。
由于我需要原始索引,因此删除索引无效。另一个选择是为所有必须跳过的值添加一个常量,这样它们肯定不是最小值。然而,这似乎效率很低。
目前我有以下功能,我仍然需要跳过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不同,因为他想跳过某些值而不是索引。
答案 0 :(得分:1)
您可以显式迭代向量并忽略索引。以下是如何做到的:
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;
}