c++ - 如何找到 vector 中 5 个最大元素的索引?

标签 c++ stl

如何找到 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/

相关文章:

初始化 DX 时出现 C++ 访问冲突

c++ - C++ 中的 std::map 键

c++ - std::list 是否保证项目永远不会移动到不同的内存位置?

c++ - 使用 fprintf 打印字符串

c++ - 使用循环停止 QThread 的正确方法(从 opencv 读取视频)

android - 从 GraphicBuffer 读取时出现意外的像素数据布局

c++ - 在使用单独的规则定义和实例化时,Boost Spirit X3 AST 无法处理语义操作

c++ - 关于 C++/程序集数据布局、数据成员访问、方法的一般问题

Android NDK STL c++_shared w/LIBCXX_FORCE_REBUILD 导致 std::stringstream NOP

iphone - unique_ptr与Iphone sdk?