#include <cstdlib>
#include <iostream>
#include <map>
#include <string>
#include <algorithm>
using namespace std;
class A
{
private:
string m_memberA;
public:
explicit A(string inp):m_memberA(inp){}
int GetValue()
{
return m_memberA.size();
}
};
class B
{
private:
int m_memberB;
public:
explicit B(int inp):m_memberB(inp){}
};
class C
{
private:
double m_memberC;
public:
explicit C(double inp):m_memberC(inp){}
};
class functor
{
private:
A* m_member;
public:
explicit functor(A* inp): m_member(inp){}
bool operator()(const std::pair<A* const, B*>& iter) const
{
return (m_member->GetValue() == (iter.first)->GetValue());
}
bool operator()(const std::pair<A* const, C*>& iter) const
{
return (m_member->GetValue() == (iter.first)->GetValue());
}
};
int main(int argc, char *argv[])
{
A* obj_ptr_A1 = new A("Hello");
A* obj_ptr_A2 = new A("MyWorld");
B* obj_ptr_B1 = new B(22);
B* obj_ptr_B2 = new B(11);
C* obj_ptr_C1 = new C(5.5);
C* obj_ptr_C2 = new C(9.5);
map<A*, B*> myMap1;
myMap1.insert(make_pair(obj_ptr_A1, obj_ptr_B1));
myMap1.insert(make_pair(obj_ptr_A2, obj_ptr_B2));
map<A*, C*> myMap2;
myMap2.insert(make_pair(obj_ptr_A1, obj_ptr_C1));
myMap2.insert(make_pair(obj_ptr_A2, obj_ptr_C2));
if(find_if(myMap1.begin(), myMap1.end(), functor(obj_ptr_A2)) != myMap1.end())
{
cout << "Found" << endl;
}
if(find_if(myMap2.begin(), myMap2.end(), functor(obj_ptr_A2)) != myMap2.end())
{
cout << "Found" << endl;
}
delete obj_ptr_A1;
delete obj_ptr_A2;
delete obj_ptr_B1;
delete obj_ptr_B2;
delete obj_ptr_C1;
delete obj_ptr_C2;
system("PAUSE");
return EXIT_SUCCESS;
}
I2luY2x1ZGUgPGNzdGRsaWI+CiNpbmNsdWRlIDxpb3N0cmVhbT4KI2luY2x1ZGUgPG1hcD4KI2luY2x1ZGUgPHN0cmluZz4KI2luY2x1ZGUgPGFsZ29yaXRobT4KIAp1c2luZyBuYW1lc3BhY2Ugc3RkOwogCmNsYXNzIEEKewpwcml2YXRlOgogICAgc3RyaW5nIG1fbWVtYmVyQTsKIApwdWJsaWM6CiAgICBleHBsaWNpdCBBKHN0cmluZyBpbnApOm1fbWVtYmVyQShpbnApe30KICAgIGludCBHZXRWYWx1ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIG1fbWVtYmVyQS5zaXplKCk7CiAgICB9Cn07CiAKY2xhc3MgQgp7CnByaXZhdGU6CiAgICBpbnQgbV9tZW1iZXJCOwpwdWJsaWM6CiAgICBleHBsaWNpdCBCKGludCBpbnApOm1fbWVtYmVyQihpbnApe30KfTsKIApjbGFzcyBDCnsKcHJpdmF0ZToKICAgIGRvdWJsZSBtX21lbWJlckM7CnB1YmxpYzoKICAgIGV4cGxpY2l0IEMoZG91YmxlIGlucCk6bV9tZW1iZXJDKGlucCl7fQp9OwogCmNsYXNzIGZ1bmN0b3IKewpwcml2YXRlOgogICAgQSogbV9tZW1iZXI7CnB1YmxpYzoKICAgIGV4cGxpY2l0IGZ1bmN0b3IoQSogaW5wKTogbV9tZW1iZXIoaW5wKXt9CiAKICAgIGJvb2wgb3BlcmF0b3IoKShjb25zdCBzdGQ6OnBhaXI8QSogY29uc3QsIEIqPiYgaXRlcikgY29uc3QKICAgIHsKICAgICAgICByZXR1cm4gKG1fbWVtYmVyLT5HZXRWYWx1ZSgpID09IChpdGVyLmZpcnN0KS0+R2V0VmFsdWUoKSk7CiAgICB9CiAKICAgIGJvb2wgb3BlcmF0b3IoKShjb25zdCBzdGQ6OnBhaXI8QSogY29uc3QsIEMqPiYgaXRlcikgY29uc3QKICAgIHsKICAgICAgICByZXR1cm4gKG1fbWVtYmVyLT5HZXRWYWx1ZSgpID09IChpdGVyLmZpcnN0KS0+R2V0VmFsdWUoKSk7CiAgICB9Cn07CiAKaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKewogICAgQSogb2JqX3B0cl9BMSA9IG5ldyBBKCJIZWxsbyIpOwogICAgQSogb2JqX3B0cl9BMiA9IG5ldyBBKCJNeVdvcmxkIik7CiAKICAgIEIqIG9ial9wdHJfQjEgPSBuZXcgQigyMik7CiAgICBCKiBvYmpfcHRyX0IyID0gbmV3IEIoMTEpOwogCiAgICBDKiBvYmpfcHRyX0MxID0gbmV3IEMoNS41KTsKICAgIEMqIG9ial9wdHJfQzIgPSBuZXcgQyg5LjUpOwogICAKICAgIG1hcDxBKiwgQio+IG15TWFwMTsKICAgIG15TWFwMS5pbnNlcnQobWFrZV9wYWlyKG9ial9wdHJfQTEsIG9ial9wdHJfQjEpKTsKICAgIG15TWFwMS5pbnNlcnQobWFrZV9wYWlyKG9ial9wdHJfQTIsIG9ial9wdHJfQjIpKTsKIAogICAgbWFwPEEqLCBDKj4gbXlNYXAyOwogICAgbXlNYXAyLmluc2VydChtYWtlX3BhaXIob2JqX3B0cl9BMSwgb2JqX3B0cl9DMSkpOwogICAgbXlNYXAyLmluc2VydChtYWtlX3BhaXIob2JqX3B0cl9BMiwgb2JqX3B0cl9DMikpOwogICAKICAgIGlmKGZpbmRfaWYobXlNYXAxLmJlZ2luKCksIG15TWFwMS5lbmQoKSwgZnVuY3RvcihvYmpfcHRyX0EyKSkgIT0gbXlNYXAxLmVuZCgpKQogICAgewogICAgICAgIGNvdXQgPDwgIkZvdW5kIiA8PCBlbmRsOwogICAgfQogCiAgICBpZihmaW5kX2lmKG15TWFwMi5iZWdpbigpLCBteU1hcDIuZW5kKCksIGZ1bmN0b3Iob2JqX3B0cl9BMikpICE9IG15TWFwMi5lbmQoKSkKICAgIHsKICAgICAgICBjb3V0IDw8ICJGb3VuZCIgPDwgZW5kbDsKICAgIH0KIAogICAgZGVsZXRlIG9ial9wdHJfQTE7CiAgICBkZWxldGUgb2JqX3B0cl9BMjsKICAgIGRlbGV0ZSBvYmpfcHRyX0IxOwogICAgZGVsZXRlIG9ial9wdHJfQjI7CiAgICBkZWxldGUgb2JqX3B0cl9DMTsKICAgIGRlbGV0ZSBvYmpfcHRyX0MyOwogCiAgICBzeXN0ZW0oIlBBVVNFIik7CiAgICByZXR1cm4gRVhJVF9TVUNDRVNTOwp9