Используйте std :: sort, чтобы найти первые N элементов в std :: vector - PullRequest
7 голосов
/ 08 декабря 2010

Мне нужно отсортировать элементы в std::vector, но меня интересует только сортировка верхних N элементов, а не весь список:

Например, в списке из 10 элементов,только первые 3 должны быть отсортированы.Остальное не волнует ...

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

Можно ли это сделать, используя std::sort?

Редактировать

Мне просто нужно было найти верхние N элементов в векторе.std::partial_sort_copy было именно то, что мне было нужно.

Ответы [ 4 ]

13 голосов
/ 08 декабря 2010

Попробуйте std::partial_sort вместо std::sort. :)

7 голосов
/ 08 декабря 2010

Для этого std::partial_sort.

2 голосов
/ 08 декабря 2010

Если вам требуется порядок, тогда partial_sort сделает это, в противном случае, если вам нужно только разделить диапазон, nth_element сделает это быстрее.

0 голосов
/ 08 декабря 2010

Просто скажите программе сортировки, где вы хотите остановить сортировку:

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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...