You can't have ImageName as a std::string and an sf::Image within the same scope. You can't declare what is inside a string as a variable name. Perhaps you can use a struct or union to hold the values you want?
It is the sense of the whole program to use the string as sf::Image variable name.
I can't imagine how to achieve the desired effect by a different approach. In which way could a struct help here?
Could you just use a container like std::vector<sf::Image*> mapImages and create a loop to load them dynamically? Why do you need the variable name to coincide with the image file name?
It's not perfect, because if you remove some images, there is a white rect problem due to the nature of vectors (memory adresses change when vector size is altered), so I'm playing now with arrays and try to overcome that somehow :-).