Working my way through Effective STL at the moment. Item 5 suggests that it’s usually preferable to use range member functions to their single element counterparts. I currently wish to copy all the values in a map (i.e. – I don’t need the keys) to a vector. You can’t easily use a range here becuase the iterator you get from a map refers to a std::pair, where the iterators you would use to insert into a vector refers to an object of the type stored in the vector, which is (if you are discarding the key) not a pair. which I would probably re-write as a template function if I was going to use it more than once. Something like: You could probably use std::transform for that purpose. I would maybe prefer Neils version though, depending on what is more readable. If you are using the boost libraries, you can use boost::bind to access the second value of the pair as follows: Here is what I would do. Also I would use a template function to make the construction of select2nd easier. This populates the array (names) with keys from the map (schemas), change s.first to s.second to get an array of values. std::transform( map.begin(), map.end(), std::back_inserter(vec), boost::bind(&MapT::value_type::first,_1) ), Source.