fork download
  1. #include <iostream>
  2. #include <memory>
  3. #include <set>
  4.  
  5. struct Person {
  6. std::string name;
  7. std::string address;
  8.  
  9. Person( std::string n, std::string a ) : name( std::move(n) ), address( std::move(a) ) {}
  10. };
  11.  
  12. using PersonPtr = std::shared_ptr<Person>;
  13.  
  14. struct CmpName {
  15. using is_transparent = void;
  16.  
  17. bool operator()( const PersonPtr &p1, const PersonPtr &p2 ) const { return p1->name < p2->name; }
  18. bool operator()( const std::string &s, const PersonPtr &p2 ) const { return s < p2->name; }
  19. bool operator()( const PersonPtr &p1, const std::string &s ) const { return p1->name < s; }
  20. };
  21.  
  22. int main() {
  23. std::set<PersonPtr,CmpName> byName;
  24.  
  25. byName.insert( std::make_shared<Person>( "John", "Earth" ) );
  26. auto f = byName.find( "John" );
  27. if( f != byName.end() ) std::cout << "found " << (*f)->name << std::endl;
  28.  
  29. };
Success #stdin #stdout 0.01s 5532KB
stdin
Standard input is empty
stdout
found John