#include #include #include template T product(T n) { T prod = 1; while(n) { prod *= n % 10; n /= 10; } return prod; } template T helper(T n) { T sum = 0; while(n >= 10) { sum++; n = product(n); } return sum; } template void persistence_sort(std::vector& v) { std::sort(v.begin(),v.end(),[](T a, T b){ T ha = helper(a), hb = helper(b); return ha == hb ? a < b : ha < hb; }); } template std::ostream &operator<<(std::ostream &os, const std::vector& vec) { for(const auto &e : vec) os << e << ' '; os << "\n"; return os; } int main() { std::vector vec1{15,99,1,34},vec2{50,25,33,22}; persistence_sort(vec1); persistence_sort(vec2); std::cout << vec1 << vec2; return 0; }