"The current way I do this is by using an STL map using a string as a key. "
Use something faster as your key? Or store the positions in an array, and now you can index into them using a symbolic name. Instead of using "u_pvmMat" as the key, use a constant called U_PVM_MAT. You're not losing flexibility because you've got hardcoded strings at the moment.
Define the constants in an enum somewhere with them.
For bonus points, autogenerate the source file containing the enum by scanning your shader sources...