
BTW, I think that boost.bimap already provides them. I'd say that's a good reason to provide equivilent functionality for std::(multi)map and std::tr1::unordered_(multi)map.
Boost.bimap provides the first and second function objects. They will work (when used with transform iterators) with all map-like objects.
Also function object wrappers for boost.tuple get<N> would really be useful. There's already a free function (boost::tuples::get<N>) that would work here (it is an actual function, not a function object, so the usual optimization issues are present), but it only works on tuples, not on std::pair - so it won't work with std::(multi)map and std::tr1::unordered_(multi)map.
It is very hard to use overloaded functions with boost.bind or lambda, or as parameters to transform iterators. This is why I explicitly said function object. About get<N> not working with pairs, fusion at_c works just fine for pairs, tuples and all fusion sequences. gpd