For supercomputing simulation purpose, I have a structure that contains two big (billions of elements) `std::vector`: one `std::vector` of "keys" (64 bits integers) and one `std::vector` of "values". I cannot use a `std::map` because in the simulations I consider, vectors are far more optimal than `std::map`. Moreover, I cannot use a vector of pairs because of some optimization and cache efficiency provided by separate vectors. Moreover I cannot use any extra memory.

So, considering these constaints, what is the most optimized way to sort the two vectors by increasing values of the keys ? (template metaprogramming and crazy compile-time tricks are welcome)