#include <algorithm>
#include <iostream>
#include <iterator>
#include <list>
#include <map>
#include <string>
typedef std::pair<int, std::string> InputPair;
typedef std::map<int, std::string> InputContainer;
typedef std::list<std::string> OutputContainer;
void copyPart_Ver1( OutputContainer& oc, const InputContainer& ic )
{
for( InputContainer::const_iterator it=ic.begin(); it!=ic.end(); ++it )
{
oc.push_back(it->second);
}
}
struct TakeSecond
{
std::string operator()( const InputPair& p ) const
{
return p.second;
}
};
void copyPart_Ver2( OutputContainer& oc, const InputContainer& ic )
{
std::transform(ic.begin(), ic.end(), std::back_inserter(oc), TakeSecond() );
}
int main() {
InputContainer ic;
ic[1] = "one";
ic[2] = "two";
std::ostream_iterator<std::string> oi( std::cout, " " );
OutputContainer oc1;
copyPart_Ver1( oc1, ic );
std::copy( oc1.begin(), oc1.end(), oi );
std::cout << std::endl;
OutputContainer oc2;
copyPart_Ver2( oc2, ic );
std::copy( oc2.begin(), oc2.end(), oi );
std::cout << std::endl;
return 0;
}
I2luY2x1ZGUgPGFsZ29yaXRobT4KI2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8aXRlcmF0b3I+CiNpbmNsdWRlIDxsaXN0PgojaW5jbHVkZSA8bWFwPgojaW5jbHVkZSA8c3RyaW5nPgoKdHlwZWRlZiBzdGQ6OnBhaXI8aW50LCBzdGQ6OnN0cmluZz4gSW5wdXRQYWlyOwp0eXBlZGVmIHN0ZDo6bWFwPGludCwgc3RkOjpzdHJpbmc+IElucHV0Q29udGFpbmVyOwp0eXBlZGVmIHN0ZDo6bGlzdDxzdGQ6OnN0cmluZz4gT3V0cHV0Q29udGFpbmVyOwoKdm9pZCBjb3B5UGFydF9WZXIxKCBPdXRwdXRDb250YWluZXImIG9jLCBjb25zdCBJbnB1dENvbnRhaW5lciYgaWMgKQp7Cglmb3IoIElucHV0Q29udGFpbmVyOjpjb25zdF9pdGVyYXRvciBpdD1pYy5iZWdpbigpOyBpdCE9aWMuZW5kKCk7ICsraXQgKQoJewoJCW9jLnB1c2hfYmFjayhpdC0+c2Vjb25kKTsKCX0KfQoKc3RydWN0IFRha2VTZWNvbmQKewoJc3RkOjpzdHJpbmcgb3BlcmF0b3IoKSggY29uc3QgSW5wdXRQYWlyJiBwICkgY29uc3QKCXsKCQlyZXR1cm4gcC5zZWNvbmQ7Cgl9Cn07Cgp2b2lkIGNvcHlQYXJ0X1ZlcjIoIE91dHB1dENvbnRhaW5lciYgb2MsIGNvbnN0IElucHV0Q29udGFpbmVyJiBpYyApCnsKCXN0ZDo6dHJhbnNmb3JtKGljLmJlZ2luKCksIGljLmVuZCgpLCBzdGQ6OmJhY2tfaW5zZXJ0ZXIob2MpLCBUYWtlU2Vjb25kKCkgKTsKfQoKaW50IG1haW4oKSB7CgoJSW5wdXRDb250YWluZXIgaWM7CgkKCWljWzFdID0gIm9uZSI7CglpY1syXSA9ICJ0d28iOwoKCXN0ZDo6b3N0cmVhbV9pdGVyYXRvcjxzdGQ6OnN0cmluZz4gb2koIHN0ZDo6Y291dCwgIiAiICk7CgoJT3V0cHV0Q29udGFpbmVyIG9jMTsKCWNvcHlQYXJ0X1ZlcjEoIG9jMSwgaWMgKTsKCXN0ZDo6Y29weSggb2MxLmJlZ2luKCksIG9jMS5lbmQoKSwgb2kgKTsKCXN0ZDo6Y291dCA8PCBzdGQ6OmVuZGw7CgkKCU91dHB1dENvbnRhaW5lciBvYzI7Cgljb3B5UGFydF9WZXIyKCBvYzIsIGljICk7CglzdGQ6OmNvcHkoIG9jMi5iZWdpbigpLCBvYzIuZW5kKCksIG9pICk7CQoJc3RkOjpjb3V0IDw8IHN0ZDo6ZW5kbDsKCglyZXR1cm4gMDsKfQ==