我需要在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
完全是我所需要的。
我需要在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
完全是我所需要的。
嘗試std::partial_sort
而不是std::sort
。 :)
這是std::partial_sort
的用途。
如果你需要訂購,那麼partial_sort
將做到這一點,否則,如果你只需要分區nth_element
將做得更快。
只要告訴排序過程要停止排序:
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;
這是一個模糊的問題 - 你只需要前三個項目進行排序?或者在開始時將整個列表中的三個最小元素排序? – 2010-12-08 19:23:47
是的;)...它可以! – Incubbus 2010-12-08 19:24:13
也許你想看看這個:http://stackoverflow.com/questions/217073/partial-sort-of-stdlist – Pacane 2010-12-08 19:24:14