effect: use map instead of unordered_map

This removes the need to specify a custom hash implementation for
std::pair<std::string, std::string>.
polygonist.hpp: update includes