#include <set>
#include <string>
#include <iostream>
struct Bar {
Bar(std::string s) : str(s) {}
std::string str;
};
struct Foo {
Foo(Bar* p) : pBar(p) {}
Bar* pBar;
};
int main() {
auto comp = [](const Foo* f1, const Foo* f2) { return f1->pBar->str < f2->pBar->str; };
std::set<Foo*, decltype(comp)> set_of_foos(comp);
set_of_foos.emplace(new Foo(new Bar("x")));
set_of_foos.emplace(new Foo(new Bar("y")));
auto it = set_of_foos.find(new Foo(new Bar("x")));
if (it == std::end(set_of_foos))
std::cout << "Element not found!" << std::endl;
else
std::cout << "Element found: " << (*it)->pBar->str << std::endl;
return 0;
}
I2luY2x1ZGUgPHNldD4KI2luY2x1ZGUgPHN0cmluZz4KI2luY2x1ZGUgPGlvc3RyZWFtPgoKc3RydWN0IEJhciB7CiAgICBCYXIoc3RkOjpzdHJpbmcgcykgOiBzdHIocykge30KICAgIHN0ZDo6c3RyaW5nIHN0cjsKfTsKCnN0cnVjdCBGb28gewogICAgRm9vKEJhciogcCkgOiBwQmFyKHApIHt9CiAgICBCYXIqIHBCYXI7Cn07CgppbnQgbWFpbigpIHsKICAgIGF1dG8gY29tcCA9IFtdKGNvbnN0IEZvbyogZjEsIGNvbnN0IEZvbyogZjIpIHsgcmV0dXJuIGYxLT5wQmFyLT5zdHIgPCBmMi0+cEJhci0+c3RyOyB9OwogICAgc3RkOjpzZXQ8Rm9vKiwgZGVjbHR5cGUoY29tcCk+IHNldF9vZl9mb29zKGNvbXApOwoKICAgIHNldF9vZl9mb29zLmVtcGxhY2UobmV3IEZvbyhuZXcgQmFyKCJ4IikpKTsKICAgIHNldF9vZl9mb29zLmVtcGxhY2UobmV3IEZvbyhuZXcgQmFyKCJ5IikpKTsKCiAgICBhdXRvIGl0ID0gc2V0X29mX2Zvb3MuZmluZChuZXcgRm9vKG5ldyBCYXIoIngiKSkpOwogICAgaWYgKGl0ID09IHN0ZDo6ZW5kKHNldF9vZl9mb29zKSkKICAgICAgICBzdGQ6OmNvdXQgPDwgIkVsZW1lbnQgbm90IGZvdW5kISIgPDwgc3RkOjplbmRsOwogICAgZWxzZQogICAgICAgIHN0ZDo6Y291dCA8PCAiRWxlbWVudCBmb3VuZDogIiA8PCAoKml0KS0+cEJhci0+c3RyIDw8IHN0ZDo6ZW5kbDsKCglyZXR1cm4gMDsKfQ==