Функция parallel_radixsort

Упорядочивает элементы в указанном диапазоне в порядке неубывания с помощью алгоритма поразрядной сортировки. Это стабильная функция сортировки, требующая функцию проекции, которая может проектировать элементы для их сортировки в подобным целочисленным беззнаковым ключам. Требуется инициализация по умолчанию для сортируемых элементов.

template<
   typename _Random_iterator
>
inline void parallel_radixsort(
   const _Random_iterator &_Begin,
   const _Random_iterator &_End
);

template<
   typename _Allocator,
   typename _Random_iterator
>
inline void parallel_radixsort(
   const _Random_iterator &_Begin,
   const _Random_iterator &_End
);

template<
   typename _Allocator,
   typename _Random_iterator
>
inline void parallel_radixsort(
   const _Allocator& _Alloc,
   const _Random_iterator &_Begin,
   const _Random_iterator &_End
);

template<
   typename _Random_iterator,
   typename _Function
>
inline void parallel_radixsort(
   const _Random_iterator &_Begin,
   const _Random_iterator &_End,
   const _Function &_Proj_func,
   const size_t _Chunk_size = 256 * 256
);

template<
   typename _Allocator,
   typename _Random_iterator,
   typename _Function
>
inline void parallel_radixsort(
   const _Random_iterator &_Begin,
   const _Random_iterator &_End,
   const _Function &_Proj_func,
   const size_t _Chunk_size = 256 * 256
);

template<
   typename _Allocator,
   typename _Random_iterator,
   typename _Function
>
inline void parallel_radixsort(
   const _Allocator& _Alloc,
   const _Random_iterator &_Begin,
   const _Random_iterator &_End,
   const _Function &_Proj_func,
   const size_t _Chunk_size = 256 * 256
);

Параметры

  • _Random_iterator
    Тип итератора входного диапазона.

  • _Allocator
    Тип совместимого распределителя памяти STL.

  • _Function
    Тип функции проекции.

  • _Begin
    Итератор случайного доступа, обращающийся к позиции первого элемента в сортируемом диапазоне.

  • _End
    Итератор прямого доступа, обращающийся к позиции первого после последнего элемента в рассматриваемом диапазоне.

  • _Alloc
    Экземпляр совместимого распределителя памяти STL.

  • _Proj_func
    Определяемый пользователем объект функции проекции, который выполняет преобразование элемента в целочисленное значение.

  • _Chunk_size
    Минимальный размер блока, который будет разбит на два для параллельного выполнения.

Заметки

Все перегрузки требуют дополнительного места n * sizeof(T), где n - число элементов для сортировки, и T - тип элемента. Необходимо, чтобы унарный функтор проекции с сигнатурой I _Proj_func(T) возвращал ключ, когда дан элемент, где T - тип элемента, и I - похожий на беззнаковое целое число тип.

Если не указать функцию проекции, для целых типов будет использоваться функция проекции по умолчанию, которая просто возвращает элемент. Функция не будет компилироваться, если элемент нецелочисленный в отсутствие функции проекции.

Если не указать тип или экземпляр распределителя, распределитель памяти STL std::allocator<T> используется, чтобы выделить буфер.

Алгоритм делит входной диапазон на два блока и последовательно делит каждый блок на два подблока для параллельного выполнения. Необязательный аргумент _Chunk_size можно использовать, чтобы показать алгоритму, что нужно обрабатывать блоки размера < _Chunk_size последовательно.

Требования

Заголовок: ppl.h

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

См. также

Ссылки

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