9 namespace Permutation {
22 template <
typename T,
typename Compare>
23 std::vector<std::size_t> get_permutation(
const std::vector<T>& vec, Compare compare)
25 std::vector<std::size_t> p(vec.size());
26 std::iota(p.begin(), p.end(), 0);
27 std::sort(p.begin(), p.end(),
28 [&](std::size_t i, std::size_t j) { return compare(vec[i], vec[j]); });
40 void apply_permutation(std::vector<T>& vec,
const std::vector<size_t>& p)
42 std::vector<bool> done(vec.size());
43 for (std::size_t i = 0; i < vec.size(); ++i)
50 std::size_t prev_j = i;
54 std::swap(vec[prev_j], vec[j]);
Contains all Cogs related functionality.