// http://stackoverflow.com/questions/14917169/finding-an-element-in-a-shared-ptr-container/14917562#14917562
#include <vector>
#include <memory>
#include <algorithm>
#include <iostream>
using namespace std;
struct Block
{
bool in_container(const vector<shared_ptr<Block>>& blocks)
{
auto end = blocks.end();
return end != find_if(blocks.begin(), end,
[this](shared_ptr<Block> const& i)
{ return i.get() == this; });
}
};
int main()
{
auto block1 = make_shared<Block>();
auto block2 = make_shared<Block>();
vector<shared_ptr<Block>> blocks;
blocks.push_back(block1);
block1->in_container(blocks) ?
cout << "block1 is in the container\n" :
cout << "block1 is not in the container\n";
block2->in_container(blocks) ?
cout << "block2 is in the container\n" :
cout << "block2 is not in the container\n";
return 0;
}
Ly8gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8xNDkxNzE2OS9maW5kaW5nLWFuLWVsZW1lbnQtaW4tYS1zaGFyZWQtcHRyLWNvbnRhaW5lci8xNDkxNzU2MiMxNDkxNzU2MgoKI2luY2x1ZGUgPHZlY3Rvcj4KI2luY2x1ZGUgPG1lbW9yeT4KI2luY2x1ZGUgPGFsZ29yaXRobT4KI2luY2x1ZGUgPGlvc3RyZWFtPgogCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKc3RydWN0IEJsb2NrCnsKICAgIGJvb2wgaW5fY29udGFpbmVyKGNvbnN0IHZlY3RvcjxzaGFyZWRfcHRyPEJsb2NrPj4mIGJsb2NrcykKICAgIHsKICAgICAgICBhdXRvIGVuZCA9IGJsb2Nrcy5lbmQoKTsKICAgICAgICByZXR1cm4gZW5kICE9IGZpbmRfaWYoYmxvY2tzLmJlZ2luKCksIGVuZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RoaXNdKHNoYXJlZF9wdHI8QmxvY2s+IGNvbnN0JiBpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyByZXR1cm4gaS5nZXQoKSA9PSB0aGlzOyB9KTsKICAgIH0KfTsKIAppbnQgbWFpbigpCnsKICAgIGF1dG8gYmxvY2sxID0gbWFrZV9zaGFyZWQ8QmxvY2s+KCk7CiAgICBhdXRvIGJsb2NrMiA9IG1ha2Vfc2hhcmVkPEJsb2NrPigpOwogICAKICAgIHZlY3RvcjxzaGFyZWRfcHRyPEJsb2NrPj4gYmxvY2tzOwogICAgYmxvY2tzLnB1c2hfYmFjayhibG9jazEpOwogICAgCiAgICBibG9jazEtPmluX2NvbnRhaW5lcihibG9ja3MpID8KICAgICAgICBjb3V0IDw8ICJibG9jazEgaXMgaW4gdGhlIGNvbnRhaW5lclxuIiA6CiAgICAgICAgY291dCA8PCAiYmxvY2sxIGlzIG5vdCBpbiB0aGUgY29udGFpbmVyXG4iOwogICAgICAgIAogICAgYmxvY2syLT5pbl9jb250YWluZXIoYmxvY2tzKSA/CiAgICAgICAgY291dCA8PCAiYmxvY2syIGlzIGluIHRoZSBjb250YWluZXJcbiIgOgogICAgICAgIGNvdXQgPDwgImJsb2NrMiBpcyBub3QgaW4gdGhlIGNvbnRhaW5lclxuIjsKICAgIAogICAgcmV0dXJuIDA7Cn0=