2010-12-08 4 views
6

Мне нужно отсортировать элементы в std::vector, но я заинтересован только в верхних N элементов сортируется, а не весь список:Использование станд :: сортировать, чтобы найти топ-N элементов в станд :: вектор

Например в списке из 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; 
Смежные вопросы