I'm not able to help test at this time, but seeing
boost::unordered_map has got my attention, as I've got a fair amount of experience trying to optimize map add/lookup/erase operations in my own game engine.
What are you trying to accomplish with
boost::unordered_maps? Are you replacing
std::map or some

/SCP equivalent? Or are you trying to speed something up that previously didn't use maps?
In my experience,
dynamic memory allocation is the enemy. As far as adding elements to the map,
boost::unordered_map—with its underlying vector implementation and the ability to call
rehash in advance to tell it how much capacity you expect to use—is superior to
std::map—which seems to allocate additional memory every time you add something. But if you're only adding to it when you load the shaders and the big concern is lookups, then it probably doesn't make as much difference.