使用std :: sort查找std :: vector中的前N个项

时间:2010-12-08 19:20:20

标签: c++ sorting stl

我需要对std::vector中的元素进行排序,但我只对排序的前N项感兴趣,而不是整个列表:

E.g。在10个元素的列表中,只需要对前3个元素进行排序。不关心其余的......

  

1,2,3 下,6,7,4,9,8,5

可以使用std::sort完成吗?

修改

我只需要在向量中找到顶部N项。 std::partial_sort_copy显然是我需要的。

4 个答案:

答案 0 :(得分:13)

尝试使用std::partial_sort代替std::sort。 :)

答案 1 :(得分:7)

这是std::partial_sort的用途。

答案 2 :(得分:2)

如果您需要订购,则partial_sort会执行此操作,否则如果您只需要对范围nth_element进行分区,则可以更快地执行此操作。

答案 3 :(得分:0)

告诉您要停止排序的排序例程:

std::vector<int> values;
for (int i = 0; i < 10; ++i)
    values.push_back(rand() % 10);

std::cout << "UNSORTED" << endl;
std::copy(values.begin(), values.end(), std::ostream_iterator<int>(std::cout, " "));
std::cout << std::endl;

std::cout << "SORTED (Partially)" << std::endl;
std::sort(values.begin(), values.begin() + 3);
std::copy(values.begin(), values.end(), std::ostream_iterator<int>(std::cout, " "));
std::cout << std::endl;