Вы можете передать функцию сравнения. В этом примере я передал функцию сравнения, содержащую счетчик:
#include <iostream>
#include <algorithm>
int main()
{
std::array<int, 3> a = {2, 1, 3};
auto printArray = [&a]() -> void
{
for (const auto& e : a) std::cout << " " << e;
std::cout << "\n";
};
// My doubts are here
while (std::prev_permutation(std::begin(a), std::end(a))) printArray();
while (std::next_permutation(std::begin(a), std::end(a), [](const auto &, const auto &) {
static std::size_t i = 2 * 6 + 1;
if (i != 0) --i;
return i != 0;
})) printArray();
return 0;
}
Для каждой перестановки существует два сравнения.