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