#include<iostream>
#include <string>
#include<vector>
#include<tuple>
#include<algorithm>
typedef std::pair<std::string, std::pair<std::string, int> > P;
struct X{
bool operator ( ) (const P& lhs, const P& rhs )
{
//return std::tie( lhs.first, lhs.second.first, lhs.second.second)
// < std::tie( rhs.first, rhs.second.first, rhs.second.second) ;
return lhs < rhs ;
}
};
main()
{
std::vector< std::pair<std::string, std::pair<std::string, int> > > vec;
vec.push_back(std::make_pair("Z", std::make_pair("a",1)) );
vec.push_back(std::make_pair("Y", std::make_pair( "a",2)) );
vec.push_back(std::make_pair("X", std::make_pair("a",3)));
std::sort(vec.begin() , vec.end() , X());
for(auto &x:vec)
std::cout <<x.first << " "<< x.second.first<< " "<< x.second.second << std::endl;
}
I2luY2x1ZGU8aW9zdHJlYW0+CiNpbmNsdWRlIDxzdHJpbmc+CiNpbmNsdWRlPHZlY3Rvcj4KI2luY2x1ZGU8dHVwbGU+CiNpbmNsdWRlPGFsZ29yaXRobT4KCnR5cGVkZWYgc3RkOjpwYWlyPHN0ZDo6c3RyaW5nLCBzdGQ6OnBhaXI8c3RkOjpzdHJpbmcsIGludD4gPiBQOwogIApzdHJ1Y3QgWHsKCmJvb2wgb3BlcmF0b3IgKCApIChjb25zdCBQJiBsaHMsIGNvbnN0IFAmIHJocyApCnsKICAgIC8vcmV0dXJuIHN0ZDo6dGllKCBsaHMuZmlyc3QsIGxocy5zZWNvbmQuZmlyc3QsIGxocy5zZWNvbmQuc2Vjb25kKSAKICAgICAgLy8gIDwgIHN0ZDo6dGllKCByaHMuZmlyc3QsIHJocy5zZWNvbmQuZmlyc3QsIHJocy5zZWNvbmQuc2Vjb25kKSA7CiAgICAgIHJldHVybiBsaHMgPCByaHMgOwp9Cn07CiAgCm1haW4oKQp7CnN0ZDo6dmVjdG9yPCBzdGQ6OnBhaXI8c3RkOjpzdHJpbmcsIHN0ZDo6cGFpcjxzdGQ6OnN0cmluZywgaW50PiA+ID4gdmVjOwoKdmVjLnB1c2hfYmFjayhzdGQ6Om1ha2VfcGFpcigiWiIsICBzdGQ6Om1ha2VfcGFpcigiYSIsMSkpICk7CnZlYy5wdXNoX2JhY2soc3RkOjptYWtlX3BhaXIoIlkiLCAgc3RkOjptYWtlX3BhaXIoICJhIiwyKSkgKTsKdmVjLnB1c2hfYmFjayhzdGQ6Om1ha2VfcGFpcigiWCIsICBzdGQ6Om1ha2VfcGFpcigiYSIsMykpKTsKc3RkOjpzb3J0KHZlYy5iZWdpbigpICwgdmVjLmVuZCgpICwgWCgpKTsKCmZvcihhdXRvICZ4OnZlYykKICBzdGQ6OmNvdXQgPDx4LmZpcnN0IDw8ICIgIjw8IHguc2Vjb25kLmZpcnN0PDwgIiAiPDwgeC5zZWNvbmQuc2Vjb25kIDw8IHN0ZDo6ZW5kbDsKfSAgICAgIA==