Using a pointer is rarely a good idea, considering you can return by reference.
std::map<std::string, Scene>& getScenes() { return scenes; }
This however is also not very good and defeats the purpose of making the member variable private, as does returning a pointer to it.
To access the member variable to view the data and not change it, which lends some sense to having a getter of a private member variable, you should return a const reference:
const std::map<std::string, Scene>& getScenes() const { return scenes; }
I'll just add that some defend that getters and setters are just clutter and you shoud just go ahead and make the member variable public if need be.
Others defend that it should be used with parsimony.
Others still, that they sholud be used but only because they're the lesser o two evils.