我目前有一个向量,需要在其中找到n个最大的数字。例如,用户输入5,我必须通过它并输出最大的5。问题是,由于其他限制,我无法对此向量进行排序。什么是最好的解决方法?
谢谢!
答案 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 ++,但希望能够描述你是如何做到这一点的。