Interseção de dois mapas

Escreva uma função que receba dois mapas diferentes. Em cada um, mantenha apenas as chaves que existem nos dois mapas de entrada, preservando os valores originais daquele mapa. Retorne os dois mapas filtrados na mesma ordem dos argumentos.

Exemplos

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

Se não houver chaves em comum, retorne dois mapas vazios.