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)
创建一个索引数组并对其进行部分排序:
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包含您的答案,并且原始向量未发生突变。