#include <iostream>
#include <algorithm>
#include <map>
bool log_copies = false;
struct tester {
tester(int value) : value(value) {}
tester(tester const & rhs) : value(rhs.value) {
if (log_copies)
std::cout << "tester(tester const &)" << std::endl;
}
int value;
};
typedef std::map< tester, int > map_t;
bool operator<( tester const & lhs, tester const & rhs ) {
return lhs.value < rhs.value;
}
int getAge( map_t::value_type const & p ) {
return p.second;
}
int getAge2( std::pair<const tester, int> const & p ) {
return p.second;
}
int main() {
const int count = 10;
map_t m;
for ( int i = 0; i < count; ++i ) {
m[ tester(i) ] = i;
}
int array[ count ] = {};
log_copies = true;
std::cout << "--------------------start test 1" << std::endl;
std::transform( m.begin(), m.end(), array, getAge );
std::cout << "--------------------end test 1" << std::endl;
std::cout << "--------------------start test 2" << std::endl;
std::transform( m.begin(), m.end(), array, getAge2 );
std::cout << "--------------------end test 2" << std::endl;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8YWxnb3JpdGhtPgojaW5jbHVkZSA8bWFwPgogCmJvb2wgbG9nX2NvcGllcyA9IGZhbHNlOwpzdHJ1Y3QgdGVzdGVyIHsKICAgIHRlc3RlcihpbnQgdmFsdWUpIDogdmFsdWUodmFsdWUpIHt9CiAgICB0ZXN0ZXIodGVzdGVyIGNvbnN0ICYgcmhzKSA6IHZhbHVlKHJocy52YWx1ZSkgewogICAgICAgIGlmIChsb2dfY29waWVzKQogICAgICAgICAgICBzdGQ6OmNvdXQgPDwgInRlc3Rlcih0ZXN0ZXIgY29uc3QgJikiIDw8IHN0ZDo6ZW5kbDsKICAgIH0KICAgIGludCB2YWx1ZTsKfTsKIAogCnR5cGVkZWYgc3RkOjptYXA8IHRlc3RlciwgaW50ID4gbWFwX3Q7CiAKYm9vbCBvcGVyYXRvcjwoIHRlc3RlciBjb25zdCAmIGxocywgdGVzdGVyIGNvbnN0ICYgcmhzICkgewogICAgcmV0dXJuIGxocy52YWx1ZSA8IHJocy52YWx1ZTsKfQppbnQgZ2V0QWdlKCBtYXBfdDo6dmFsdWVfdHlwZSBjb25zdCAmIHAgKSB7CiAgICByZXR1cm4gcC5zZWNvbmQ7Cn0KaW50IGdldEFnZTIoIHN0ZDo6cGFpcjxjb25zdCB0ZXN0ZXIsIGludD4gY29uc3QgJiBwICkgewogICAgcmV0dXJuIHAuc2Vjb25kOwp9CiAKaW50IG1haW4oKSB7CiAgICBjb25zdCBpbnQgY291bnQgPSAxMDsKICAgIG1hcF90IG07CiAgICBmb3IgKCBpbnQgaSA9IDA7IGkgPCBjb3VudDsgKytpICkgewogICAgICAgIG1bIHRlc3RlcihpKSBdID0gaTsKICAgIH0KICAgIGludCBhcnJheVsgY291bnQgXSA9IHt9OwogICAgbG9nX2NvcGllcyA9IHRydWU7CiAgICBzdGQ6OmNvdXQgPDwgIi0tLS0tLS0tLS0tLS0tLS0tLS0tc3RhcnQgdGVzdCAxIiA8PCBzdGQ6OmVuZGw7CiAgICBzdGQ6OnRyYW5zZm9ybSggbS5iZWdpbigpLCBtLmVuZCgpLCBhcnJheSwgZ2V0QWdlICk7CiAgICBzdGQ6OmNvdXQgPDwgIi0tLS0tLS0tLS0tLS0tLS0tLS0tZW5kIHRlc3QgMSIgPDwgc3RkOjplbmRsOwogICAgc3RkOjpjb3V0IDw8ICItLS0tLS0tLS0tLS0tLS0tLS0tLXN0YXJ0IHRlc3QgMiIgPDwgc3RkOjplbmRsOwogICAgc3RkOjp0cmFuc2Zvcm0oIG0uYmVnaW4oKSwgbS5lbmQoKSwgYXJyYXksIGdldEFnZTIgKTsKICAgIHN0ZDo6Y291dCA8PCAiLS0tLS0tLS0tLS0tLS0tLS0tLS1lbmQgdGVzdCAyIiA8PCBzdGQ6OmVuZGw7Cn0K