Страницы

Поиск по вопросам

четверг, 9 января 2020 г.

c++ stl: сортировка и копирование

#cpp #сортировка #stl #copy


Подскажите пожалуйста, есть ли возможность средствами STL отсортировать вектор в
новый вектор?

Что-то типа

std::vector data2 = std::sort_copy(data1.begin(), data1.end(), [](int v1, int
v2){...});


Просто не хочется писать следующий код:

std::vector data2 = data1;
std::sort(data1.begin(), data1.end(), [](int v1, int v2){...});


А то начинает страдать чувство прекрасного от лишнего присваивания :)

P.S. исправил ошибку в параметрах sort
    


Ответы

Ответ 1



Вы не только можете копировать в другой контейнер все содержимое первого вектора в отсортированном виде, но и любую отсортированную партию: std::vector data1{84, 44, 12, 23, 34, 8, 7, 4}, data2(data1.size()); auto f1 = data1.begin(), s1 = data1.end(), f2 = data2.begin(), s2 = data2.end(); std::partial_sort_copy(f1, s1, f2, s2); теперь data2 содержит элементы со значением из data1 в отсортированном порядке, а data1 не изменил свое состояние. //data1: 84 44 12 23 34 8 7 4 //data2: 4 7 8 12 23 34 44 84 Например, мы хотим копировать половину отсортированной последовательности, по критерию, отличную от std::less(например в убывающем порядке). Тогда: std::partial_sort_copy(f1, s1, f2, f2 + std::distance(f2,s2)/2, std::greater()); //data2: 84 44 34 23 23 34 44 84

Комментариев нет:

Отправить комментарий