
"Marcin Kalicinski" <kalita@poczta.onet.pl> wrote in message news:drmai0$4k0$1@sea.gmane.org...
MyMap mymap; // A map of some key type to some value type MyVector myvector; // A vector of elements either of key type or value
(...)
// Implementation using boost::bind transform(mymap.begin(),mymap.end(),back_inserter (myvector),boost::bind(&MyMap::value_type::second,_1));
And here's the most straighforward of them, but overlooked, implementation using BOOST_FOREACH, no std-omitting was necessary at all:
BOOST_FOREACH(const MyMap::value_type &v, mymap) myvector.push_back(v.first);
cheers, Marcin
An interesting alternate solution, but I was mainly looking for a way that didn't involve directly using a for loop or a derivative thereof in my code. That is to say, I was trying to just use a standard algorithm (i.e. transform), rather than coding a loop, which despite appearances is what BOOST_FOREACH is. Note that I am not arguing which way is better, only presenting a solution to those who like for_each and transform. I have to say, though, that BOOST_FOREACH does have its uses and certainly allows for a more concise and less error prone way to do something with each object in a container. The best solution to the problem is to have standard copy_keys and copy_values algorithms which, similar to transform takes begin and end iterators to the source and destination ranges, performing the necessary .first/.second accesses and then just a straight copy. In fact, I think this whole ordeal has inspired me enough to perhaps add these to the boost wiki site. Michael Goldshteyn