#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.