2010-12-08 37 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; 
相關問題