在向量中找到n个最大值

时间:2013-09-15 00:38:55

标签: c++

我目前有一个向量,需要在其中找到n个最大的数字。例如,用户输入5,我必须通过它并输出最大的5。问题是,由于其他限制,我无法对此向量进行排序。什么是最好的解决方法?

谢谢!

3 个答案:

答案 0 :(得分:7)

根据您对不修改原始矢量的描述以及我希望订单重要的假设,我建议std::partial_sort_copy

//assume vector<int> as source
std::vector<int> dest(n); //largest n numbers; VLA or std::dynarray in C++14
std::partial_sort_copy(
    std::begin(source), std::end(source), //.begin/.end in C++98/C++03
    std::begin(dest), std::end(dest), 
    std::greater<int>() //remove "int" in C++14
);
//output dest however you want, e.g., std::copy

答案 1 :(得分:0)

复制和排序选项吗?我的意思是,如果你的应用程序不是那么重要的性能,那么这是最简单的(渐近太糟糕)的方式!

答案 2 :(得分:0)

这样的事情(A是传入矢量,N是您想要查找的最大数字,v成为结果矢量):

vector<T> v(N, 0);   
for each element in A:
   if (element > v[N-1])
       for(i = N-1; i > 0 && v[i] < element; i--)
          v[i] = v[i-1];
       v[i] = element;

这是某种“伪C ++”,不完全是C ++,但希望能够描述你是如何做到这一点的。