#include <iostream>
#include <string>
#include <set>
struct object
{
object(const std::string&_object_name):object_name(_object_name){}
bool operator<(const object&o)const{return object_name<o.object_name;}
bool operator<(const std::string&str)const{return object_name<str;}
std::string object_name;
char some_data[100500];
};
class proxy
{
public:
proxy( const std::string& name, object* ptr = nullptr )
: name_(name), ptr_(ptr) {}
bool operator<(const proxy& rhs) const { return name_ < rhs.name_; }
std::string name() const { return name_; }
private:
const std::string name_;
object* ptr_;
};
int main() {
proxy one( "john", new object("john") );
proxy two( "jane", new object("jane") );
std::multiset<proxy> ms = { one, two };
proxy f("jane");
auto it = ms.find(f);
if( it != ms.end() )
{
std::cout << it->name() << std::endl;
}
else
{
std::cout << "not found\n";
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8c2V0PgoKc3RydWN0IG9iamVjdAp7CiAgICBvYmplY3QoY29uc3Qgc3RkOjpzdHJpbmcmX29iamVjdF9uYW1lKTpvYmplY3RfbmFtZShfb2JqZWN0X25hbWUpe30KICAgIGJvb2wgb3BlcmF0b3I8KGNvbnN0IG9iamVjdCZvKWNvbnN0e3JldHVybiBvYmplY3RfbmFtZTxvLm9iamVjdF9uYW1lO30KICAgIGJvb2wgb3BlcmF0b3I8KGNvbnN0IHN0ZDo6c3RyaW5nJnN0ciljb25zdHtyZXR1cm4gb2JqZWN0X25hbWU8c3RyO30KICAgIHN0ZDo6c3RyaW5nIG9iamVjdF9uYW1lOwogICAgY2hhciBzb21lX2RhdGFbMTAwNTAwXTsKfTsKCmNsYXNzIHByb3h5CnsKcHVibGljOgoJcHJveHkoIGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lLCBvYmplY3QqIHB0ciA9IG51bGxwdHIgKSAKCTogbmFtZV8obmFtZSksIHB0cl8ocHRyKSB7fQoJYm9vbCBvcGVyYXRvcjwoY29uc3QgcHJveHkmIHJocykgY29uc3QgeyByZXR1cm4gbmFtZV8gPCByaHMubmFtZV87IH0KCXN0ZDo6c3RyaW5nIG5hbWUoKSBjb25zdCB7IHJldHVybiBuYW1lXzsgfQpwcml2YXRlOgoJY29uc3Qgc3RkOjpzdHJpbmcgbmFtZV87CglvYmplY3QqIHB0cl87Cn07CgppbnQgbWFpbigpIHsKCglwcm94eSBvbmUoICJqb2huIiwgbmV3IG9iamVjdCgiam9obiIpICk7Cglwcm94eSB0d28oICJqYW5lIiwgbmV3IG9iamVjdCgiamFuZSIpICk7CgoJc3RkOjptdWx0aXNldDxwcm94eT4gbXMgPSB7IG9uZSwgdHdvIH07CgoJcHJveHkgZigiamFuZSIpOwoJCglhdXRvIGl0ID0gbXMuZmluZChmKTsKCWlmKCBpdCAhPSBtcy5lbmQoKSApCgl7CgkJc3RkOjpjb3V0IDw8IGl0LT5uYW1lKCkgPDwgc3RkOjplbmRsOwoJfQoJZWxzZQoJewoJCXN0ZDo6Y291dCA8PCAibm90IGZvdW5kXG4iOwoJfQoKCXJldHVybiAwOwp9