Функция 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

См. также

Ссылки

Пространство имен concurrency