ParallelSort Parallel Sort Include the Header ParallelSort_1ParallelSortInclude Sort a Range of Items ParallelSort_1SortARangeOfItems Sort a Range of Items with a Custom Comparator ParallelSort_1SortARangeOfItemsWithACustomComparator Enable Stateful Data Passing ParallelSort_1ParallelSortEnableStatefulDataPassing Taskflow provides template functions for constructing tasks to sort ranges of items in parallel. Include the Header You need to include the header file, taskflow/algorithm/sort.hpp, for creating a parallel-sort task. #include<taskflow/algorithm/sort.hpp> Sort a Range of Items The task created by tf::Taskflow::sort(B first, E last) performs parallel sort to rank a range of elements specified by [first, last) in increasing order. The given iterators must be random-accessible. The following example creates a task to sort a data vector in increasing order. tf::Taskflowtaskflow; tf::Executorexecutor; std::vector<int>data={1,4,9,2,3,11,-8}; tf::Tasksort=taskflow.sort(data.begin(),data.end()); executor.run(taskflow).wait(); assert(std::is_sorted(data.begin(),data.end())); Elements are compared using the operator <. Sort a Range of Items with a Custom Comparator tf::Taskflow::sort(B first, E last, C cmp) is an overload of parallel sort that allows users to specify a custom comparator. The following example sorts a data vector in decreasing order. tf::Taskflowtaskflow; tf::Executorexecutor; std::vector<int>data={1,4,9,2,3,11,-8}; tf::Tasksort=taskflow.sort(data.begin(),data.end(), [](inta,intb){returna>b;} ); executor.run(taskflow).wait(); assert(std::is_sorted(data.begin(),data.end(),std::greater<int>{})); tf::Taskflow::sort is not stable. That is, two or more objects with equal keys may not appear in the same order before sorting. Enable Stateful Data Passing The iterators taken by tf::Taskflow::sort are templated. You can use std::reference_wrapper to enable stateful data passing between the sort task and others. The following example creates a task init to initialize the data vector and a task sort to sort the data in parallel after init finishes. tf::Taskflowtaskflow; tf::Executorexecutor; std::vector<int>data; std::vector<int>::iteratorfirst,last; tf::Taskinit=taskflow.emplace([&](){ data={1,4,9,2,3,11,-8}; first=data.begin(); last=data.end(); }); tf::Tasksort=taskflow.sort( std::ref(first),std::ref(last),[](intl,intr){returnl<r;} ); init.precede(sort); executor.run(taskflow).wait(); assert(std::is_sorted(data.begin(),data.end()));