2010-12-08 66 views
6

我需要在std::vector元素进行排序,但我只在顶部N项目有兴趣进行排序,而不是整个列表:使用std ::排序找到一个std前N项:: vector的

例如在10个元素的列表中,只有前3个元素需要排序。不要在意休息...

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

可以这样做使用std::sort

编辑

我只是需要找到一个载体上N项目。 std::partial_sort_copy完全是我所需要的。

+1

这是一个模糊的问题 - 你只需要前三个项目进行排序?或者在开始时将整个列表中的三个最小元素排序? – 2010-12-08 19:23:47

+0

是的;)...它可以! – Incubbus 2010-12-08 19:24:13

+0

也许你想看看这个:http://stackoverflow.com/questions/217073/partial-sort-of-stdlist – Pacane 2010-12-08 19:24:14

回答

2

如果你需要订购,那么partial_sort将做到这一点,否则,如果你只需要分区nth_element将做得更快。

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;