Intersección de dos mapas

Escribe una función que reciba dos mapas diferentes. En cada uno, conserva únicamente las claves que existan en ambos mapas de entrada y mantén los valores originales de ese mapa. Devuelve los dos mapas filtrados en el mismo orden que los argumentos.

Ejemplos

intersection(std::map<std::string, int>{{"a", 5}, {"b", 13}, {"c", 7}}, std::map<std::string, int>{{"b", 5}, {"c", 8}, {"d", 91}, {"e", 99}}); // std::vector<std::map<std::string, int>>{{{"b", 13}, {"c", 7}}, {{"b", 5}, {"c", 8}}}

intersection(std::map<std::string, int>{{"a", 5}, {"b", 13}, {"c", 7}}, std::map<std::string, int>{{"c", 9}, {"d", 8}}); // std::vector<std::map<std::string, int>>{{{"c", 7}}, {{"c", 9}}}

intersection(std::map<std::string, int>{{"a", 1}, {"b", 34}}, std::map<std::string, int>{{"c", 9}, {"d", 8}}); // std::vector<std::map<std::string, int>>{{}, {}}

Notas

Si no hay claves en común, devuelve dos mapas vacíos.