如何找到 vector 中 5 个最大元素的索引?
例如std::vector<int>
如何找到 5 个最大值的索引而不改变原始 vector ?
最佳答案
std::partial_sort( v.begin(), v.begin()+5, v.end() )
以某种方式对 vector 进行排序,即对 5 个最小值进行排序并且在 v
的开头。其余的未排序。
因为你想要索引并保留原件:
用 0..n-1 中的数字填充一个新 vector ,并提供一个执行 v[a] > v[b]
而不是 a > b
的比较函数:
struct Comp{
Comp( const vector<int>& v ) : _v(v) {}
bool operator ()(int a, int b) { return _v[a] > _v[b]; }
const vector<int>& _v;
}
vector<int> vx;
vx.resize(v.size());
for( int i= 0; i<v.size(); ++i ) vx[i]= i;
partial_sort( vx.begin(), vx.begin()+5, vx.end(), Comp(v) );
vx[0..4]
包含索引。
关于c++ - 如何找到 vector 中 5 个最大元素的索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12466519/