- #include <iostream> 
- #include <memory> 
- #include <set> 
-   
- struct Person { 
-     std::string name; 
-     std::string address; 
-   
-     Person( std::string n, std::string a ) : name( std::move(n) ), address( std::move(a) ) {} 
- }; 
-   
- using PersonPtr = std::shared_ptr<Person>; 
-   
- struct CmpName { 
- 	using is_transparent = void; 
-   
-     bool operator()( const PersonPtr &p1, const PersonPtr &p2 ) const { return p1->name < p2->name; } 
-     bool operator()( const std::string &s, const PersonPtr &p2 ) const { return s < p2->name; } 
-     bool operator()( const PersonPtr &p1, const std::string &s ) const { return p1->name < s; } 
- }; 
-   
- int main() { 
-     std::set<PersonPtr,CmpName> byName; 
-   
-     byName.insert( std::make_shared<Person>( "John", "Earth" ) ); 
-     auto f = byName.find( "John" ); 
-     if( f != byName.end() ) std::cout << "found " << (*f)->name << std::endl; 
-   
- }; 
				I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8bWVtb3J5PgojaW5jbHVkZSA8c2V0PgoKc3RydWN0IFBlcnNvbiB7CiAgICBzdGQ6OnN0cmluZyBuYW1lOwogICAgc3RkOjpzdHJpbmcgYWRkcmVzczsKICAgIAogICAgUGVyc29uKCBzdGQ6OnN0cmluZyBuLCBzdGQ6OnN0cmluZyBhICkgOiBuYW1lKCBzdGQ6Om1vdmUobikgKSwgYWRkcmVzcyggc3RkOjptb3ZlKGEpICkge30KfTsKCnVzaW5nIFBlcnNvblB0ciA9IHN0ZDo6c2hhcmVkX3B0cjxQZXJzb24+OwoKc3RydWN0IENtcE5hbWUgewoJdXNpbmcgaXNfdHJhbnNwYXJlbnQgPSB2b2lkOwoJCiAgICBib29sIG9wZXJhdG9yKCkoIGNvbnN0IFBlcnNvblB0ciAmcDEsIGNvbnN0IFBlcnNvblB0ciAmcDIgKSBjb25zdCB7IHJldHVybiBwMS0+bmFtZSA8IHAyLT5uYW1lOyB9CiAgICBib29sIG9wZXJhdG9yKCkoIGNvbnN0IHN0ZDo6c3RyaW5nICZzLCBjb25zdCBQZXJzb25QdHIgJnAyICkgY29uc3QgeyByZXR1cm4gcyA8IHAyLT5uYW1lOyB9CiAgICBib29sIG9wZXJhdG9yKCkoIGNvbnN0IFBlcnNvblB0ciAmcDEsIGNvbnN0IHN0ZDo6c3RyaW5nICZzICkgY29uc3QgeyByZXR1cm4gcDEtPm5hbWUgPCBzOyB9Cn07CgppbnQgbWFpbigpIHsKICAgIHN0ZDo6c2V0PFBlcnNvblB0cixDbXBOYW1lPiBieU5hbWU7CiAgICAKICAgIGJ5TmFtZS5pbnNlcnQoIHN0ZDo6bWFrZV9zaGFyZWQ8UGVyc29uPiggIkpvaG4iLCAiRWFydGgiICkgKTsKICAgIGF1dG8gZiA9IGJ5TmFtZS5maW5kKCAiSm9obiIgKTsKICAgIGlmKCBmICE9IGJ5TmFtZS5lbmQoKSApIHN0ZDo6Y291dCA8PCAiZm91bmQgIiA8PCAoKmYpLT5uYW1lIDw8IHN0ZDo6ZW5kbDsKICAgIAp9Ow==