返回向量最高值的前 5 个索引的函数

Kin*_*iez 2 c++ indexing vector

有一个函数可以做到这一点吗?

我想提取索引中最高值的前 5 个索引。

我只能获取最高值的索引,但然后我必须删除它并再次执行,还有其他方法吗?

for (unsigned i = 0; i < 5 ; i++){
     int index = std::distance(vMetric.begin(),std::max_element(vMetric.begin(), vMetric.end()));
     vMetric.erase(vMetric.begin()+ index);
}
Run Code Online (Sandbox Code Playgroud)

wco*_*ran 5

创建一个索引数组并对其进行部分排序:

std::vector<size_t> indices(vMetric.size());
std::iota(indices.begin(), indices.end(), 0);
std::partial_sort(indices.begin(), indices.begin() + 5, indices.end(),
                  [&](size_t A, size_t B) {
                     return vMetric[A] > vMetric[B];
                  });
Run Code Online (Sandbox Code Playgroud)

的前 5 个元素indices包含您的答案,并且原始向量未发生突变。