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

180
18 сентября 2018, 22:50

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

Что-то типа

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

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

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

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

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

Answer 1

Вы не только можете копировать в другой контейнер все содержимое первого вектора в отсортированном виде, но и любую отсортированную партию:

std::vector<int> 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<int>(например в убывающем порядке). Тогда:

std::partial_sort_copy(f1, s1, f2, f2 + std::distance(f2,s2)/2, 
                      std::greater<int>());        
//data2: 84 44 34 23 23 34 44 84 
READ ALSO
Java выводит already in use: bind, но порт не занят

Java выводит already in use: bind, но порт не занят

Выводит ошибку BindException: Address already in use: bind, хотя порт не занят

160
Объясните что такое JNDI подробно

Объясните что такое JNDI подробно

Что такое JNDI? Как я понял это api для получения EJB бинов, те

204
Как реализовать подобное?

Как реализовать подобное?

Есть множественный выбор в приложении androidНужно, чтобы программа выдавала среднее арифметическое выбранных пользователем позиций

165
Как ограничить свайп вниз у BottomSheet?

Как ограничить свайп вниз у BottomSheet?

Есть BottomSheet который по свайпу вверх выезжает с низу, и так же закрывается свайпом внизДело в том что когда он закрыт, его можно утянуть вниз...

179