Функция parallel_buffered_sort
Упорядочивает элементы указанного диапазона в неубывающую последовательность или в соответствии с критерием упорядочивания, указанным параллельно бинарным предикатом. Эта функция семантически схожа с std::sort, так как она - основанная на сравнении, неустойчивая, сортирует на месте, за исключением того, что ей необходим дополнительный пробел O(n) и инициализация по умолчанию для сортируемых элементов.
template<
typename _Random_iterator
>
inline void parallel_buffered_sort(
const _Random_iterator &_Begin,
const _Random_iterator &_End
);
template<
typename _Allocator,
typename _Random_iterator
>
inline void parallel_buffered_sort(
const _Random_iterator &_Begin,
const _Random_iterator &_End
);
template<
typename _Allocator,
typename _Random_iterator
>
inline void parallel_buffered_sort(
const _Allocator& _Alloc,
const _Random_iterator &_Begin,
const _Random_iterator &_End
);
template<
typename _Random_iterator,
typename _Function
>
inline void parallel_buffered_sort(
const _Random_iterator &_Begin,
const _Random_iterator &_End,
const _Function &_Func,
const size_t _Chunk_size = 2048
);
template<
typename _Allocator,
typename _Random_iterator,
typename _Function
>
inline void parallel_buffered_sort(
const _Random_iterator &_Begin,
const _Random_iterator &_End,
const _Function &_Func,
const size_t _Chunk_size = 2048
);
template<
typename _Allocator,
typename _Random_iterator,
typename _Function
>
inline void parallel_buffered_sort(
const _Allocator& _Alloc,
const _Random_iterator &_Begin,
const _Random_iterator &_End,
const _Function &_Func,
const size_t _Chunk_size = 2048
);
Параметры
_Random_iterator
Тип итератора входного диапазона._Allocator
Тип совместимого распределителя памяти STL._Function
Тип бинарного компаратора._Begin
Итератор случайного доступа, обращающийся к позиции первого элемента в сортируемом диапазоне._End
Итератор прямого доступа, обращающийся к позиции первого после последнего элемента в рассматриваемом диапазоне._Alloc
Экземпляр совместимого распределителя памяти STL._Func
Определяемый пользователем объект функции предиката, который определяет критерии сравнения, которые будут соответствовать идущим подряд элементам. Двоичный предикат принимает два аргумента и возвращает true в случае соответствия, и false в случае несоответствия. Эта функция компаратора должна создать строгое слабое упорядочение пар элементов последовательности._Chunk_size
Минимальный размер блока, который будет разбит на два для параллельного выполнения.
Заметки
Все перегрузки требуют дополнительного места n * sizeof(T), где n - число элементов для сортировки, и T - тип элемента. В большинстве случаев parallel_buffered_sort покажет улучшения в производительности по сравнению с parallel_sort, и необходимо использовать его вместо parallel_sort при наличии свободной памяти.
Если не указать двоичный компаратор, std::less используется по умолчанию, что требует тип элемента для оператора operator<().
Если не указать тип или экземпляр распределителя, распределитель памяти STL std::allocator<T> используется, чтобы выделить буфер.
Алгоритм делит входной диапазон на два блока и последовательно делит каждый блок на два подблока для параллельного выполнения. Необязательный аргумент _Chunk_size можно использовать, чтобы показать алгоритму, что нужно обрабатывать блоки размера < _Chunk_size последовательно.
Требования
Заголовок: ppl.h
Пространство имен: concurrency