#include #include #include #include #include // std::pair, std::get /** * Возводим все в квадрат * vector, map, pair */ template Type Sqr(Type var) { return var * var; } template std::vector Sqr(std::vector vec) { for (auto &elem : vec) { elem = Sqr(elem); } return vec; } template std::pair Sqr(std::pair pair) { std::get<0>(pair) = Sqr(std::get<0>(pair)); std::get<1>(pair) = Sqr(std::get<1>(pair)); return pair; } template std::map Sqr(std::map map) { for (auto &elem : map) { elem.second = Sqr(elem.second); } return map; } int main() { std::vector v = {1, 2, 3}; std::cout << "vector:"; for (int x : Sqr(v)) { std::cout << ' ' << x; } std::cout << std::endl; std::map> map_of_pairs = { {4, {2, 2}}, {7, {4, 3}} }; std::cout << "map of pairs:" << std::endl; for (const auto& x : Sqr(map_of_pairs)) { std::cout << x.first << ' ' << x.second.first << ' ' << x.second.second << std::endl; } return 0; }