[ Web Proxy ]
URL:
Viewing: https://raw.githubusercontent.com/PixelMay/taskflow/master/docs/xml/ParallelSort.xml [Back]  [Original]


  
    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()));



Web Proxy Viewer  |  New URL  |  Original Page