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.
executor.
run(taskflow).wait();
class to create an executor for running a taskflow graph
Definition executor.hpp:50
tf::Future< void > run(Taskflow &taskflow)
runs a taskflow once
Definition executor.hpp:1573
Task sort(B first, E last, C cmp)
constructs a dynamic task to perform STL-styled parallel sort
class to create a task handle over a node in a taskflow graph
Definition task.hpp:187
class to create a taskflow object
Definition core/taskflow.hpp:73
- Note
- 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.
[](int a, int b) { return a > b; }
);
executor.
run(taskflow).wait();
- Note
- 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.
data = {1, 4, 9, 2, 3, 11, -8};
first = data.begin();
last = data.end();
});
);
executor.
run(taskflow).wait();
Task emplace(C &&callable)
creates a static task
Definition flow_builder.hpp:742
Task & precede(Ts &&... tasks)
adds precedence links from this to other tasks
Definition task.hpp:420