23#ifndef VCL_BASE_PERMUTE_H
24#define VCL_BASE_PERMUTE_H
26#include <vclib/base/base.h>
53template<
typename T,
typename... Args>
55 std::vector<T, Args...>& vec,
56 const std::vector<uint>& newIndices)
58 assert(vec.size() == newIndices.size());
60 for (uint i = 0; i < newIndices.size(); ++i) {
63 if (newIndices[i] != i) {
66 vec[newIndices[i]] = std::move(vec[i]);
109template<
typename T,
typename... Args>
111 std::vector<T, Args...>& vec,
112 const std::vector<uint>& newIndices)
116 assert(vec.size() == newIndices.size());
118 std::vector<bool> visited(vec.size(),
false);
120 for (uint i = 0; i < vec.size(); ++i) {
121 if (visited[i] || newIndices[i] == i) {
126 T temp = std::move(vec[i]);
128 while (!visited[current]) {
129 visited[current] =
true;
130 int next = newIndices[current];
131 swap(temp, vec[next]);
constexpr uint UINT_NULL
The UINT_NULL value represent a null value of uint that is the maximum value that can be represented ...
Definition base.h:48