我需要对std::vector
中的元素进行排序,但我只对排序的前N
项感兴趣,而不是整个列表:
E.g。在10个元素的列表中,只需要对前3个元素进行排序。不关心其余的......
1,2,3 下,6,7,4,9,8,5
可以使用std::sort
完成吗?
修改
我只需要在向量中找到顶部N
项。 std::partial_sort_copy
显然是我需要的。
答案 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;