我需要在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