我有一个 double 向量,需要知道向量中最小值的索引和值。这很容易通过算法头完成,但是我需要忽略一些索引。
只删除索引是行不通的,因为我需要原始索引。另一种选择是向所有必须跳过的值添加一个常量,以便它们肯定不是最小值。然而,这似乎效率很低。
目前我有以下函数,其中我仍然必须跳过 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 不同因为他想跳过某些值而不是索引。
最佳答案
您可以明确地遍历向量并忽略索引。这是如何完成的:
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;
}
关于algorithm - 向量中的最小值,跳过一些索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28753815/