#include <x/algorithm.H> std::vector<size_t> order_by={6,3,5,4,2,0,1,7}; std::vector<std::string> arr={"G","D","F","E","C","A","B","H"}; x::sort_by(order_by, [&] (size_t a, size_t b) { std::swap(arr.at(a),arr.at(b)); });

`x::sort_by`

facilitates sorting an array by specifying the new order of the values in
the array.
`x::sort_by`

()'s first parameter is a
`std::vector<size_t>`

with strictly increasing
values starting with 0, so a vector of size 8 will always have values 0
through 7, in some order.

`x::sort_by`

() sorts the vector in place.
`x::sort_by`

()'s second parameter is a closure
that takes two `size_t`

parameters, whose values
are always two valid vector indexes, and the closure gets called
to indicate that the specified values in the vector should be swapped.

Using the closure to invoke `std::swap`

on another
vector results in that vector getting sorted accoding to the indexes
specified by the first vector. The above examples results in both
vector getting sorted.