#include<map>
class Class1
{
public:
Class1(int id) : id(id) {}
private:
int id;
friend struct Class1Compare;
friend struct std::less<Class1>;
};
struct Class1Compare
{
bool operator() (const Class1& lhs, const Class1& rhs) const
{
return lhs.id < rhs.id;
}
};
namespace std
{
template<> struct less<Class1>
{
bool operator() (const Class1& lhs, const Class1& rhs) const
{
return lhs.id < rhs.id;
}
};
}
int main() {
std::map<Class1, int, Class1Compare> c2int;
std::map<Class1, int> c2int_2;
return 0;
}
I2luY2x1ZGU8bWFwPgoKY2xhc3MgQ2xhc3MxCnsKcHVibGljOgogICAgQ2xhc3MxKGludCBpZCkgOiBpZChpZCkge30KCnByaXZhdGU6CiAgICBpbnQgaWQ7CiAgICBmcmllbmQgc3RydWN0IENsYXNzMUNvbXBhcmU7CiAgICBmcmllbmQgc3RydWN0IHN0ZDo6bGVzczxDbGFzczE+Owp9OwoKc3RydWN0IENsYXNzMUNvbXBhcmUKewogICBib29sIG9wZXJhdG9yKCkgKGNvbnN0IENsYXNzMSYgbGhzLCBjb25zdCBDbGFzczEmIHJocykgY29uc3QKICAgewogICAgICAgcmV0dXJuIGxocy5pZCA8IHJocy5pZDsKICAgfQp9OwoKbmFtZXNwYWNlIHN0ZAp7CiAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBsZXNzPENsYXNzMT4KICAgIHsKICAgICAgIGJvb2wgb3BlcmF0b3IoKSAoY29uc3QgQ2xhc3MxJiBsaHMsIGNvbnN0IENsYXNzMSYgcmhzKSBjb25zdAogICAgICAgewogICAgICAgICAgIHJldHVybiBsaHMuaWQgPCByaHMuaWQ7CiAgICAgICB9CiAgICB9Owp9CgppbnQgbWFpbigpIHsKICAgIHN0ZDo6bWFwPENsYXNzMSwgaW50LCBDbGFzczFDb21wYXJlPiBjMmludDsKICAgIHN0ZDo6bWFwPENsYXNzMSwgaW50PiBjMmludF8yOwoJcmV0dXJuIDA7Cn0=