#include <iostream>
#include <vector>
#include <set>
#include <functional>
#include <algorithm>
using namespace std;
struct pnt {
int num;
bool has;
};
struct filter {
set<int> seen;
bool operator()(const pnt& p) {
return !p.has && (seen.find(p.num) != seen.end());
}
};
int main() {
pnt data[] = {
{3,true}, {4, true}, {4, false}, {3, true}, {5, false}, {5, true}, {7, false}, {8, false}, {9, false}, {10, true}, {10, false}
};
vector<pnt> v(data, data+11);
cout << "Before:" << endl;
for (vector<pnt>::const_iterator i = v.begin() ; i != v.end() ; i++) {
cout << i->num << " " << i->has << endl;
}
filter f;
for (vector<pnt>::const_iterator i = v.begin() ; i != v.end() ; i++) {
if (i->has) {
f.seen.insert(i->num);
}
}
v.erase(remove_if(v.begin(), v.end(), f), v.end());
cout << "After:" << endl;
for (vector<pnt>::const_iterator i = v.begin() ; i != v.end() ; i++) {
cout << i->num << " " << i->has << endl;
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8c2V0PgojaW5jbHVkZSA8ZnVuY3Rpb25hbD4KI2luY2x1ZGUgPGFsZ29yaXRobT4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnN0cnVjdCBwbnQgewogICAgaW50IG51bTsKICAgIGJvb2wgaGFzOwp9OwoKc3RydWN0IGZpbHRlciB7CglzZXQ8aW50PiBzZWVuOwoJYm9vbCBvcGVyYXRvcigpKGNvbnN0IHBudCYgcCkgewoJCXJldHVybiAhcC5oYXMgJiYgKHNlZW4uZmluZChwLm51bSkgIT0gc2Vlbi5lbmQoKSk7Cgl9Cn07CgppbnQgbWFpbigpIHsKCXBudCBkYXRhW10gPSB7CgkJezMsdHJ1ZX0sIHs0LCB0cnVlfSwgezQsIGZhbHNlfSwgezMsIHRydWV9LCB7NSwgZmFsc2V9LCB7NSwgdHJ1ZX0sIHs3LCBmYWxzZX0sIHs4LCBmYWxzZX0sIHs5LCBmYWxzZX0sIHsxMCwgdHJ1ZX0sIHsxMCwgZmFsc2V9Cgl9OwoJdmVjdG9yPHBudD4gdihkYXRhLCBkYXRhKzExKTsKCWNvdXQgPDwgIkJlZm9yZToiIDw8IGVuZGw7Cglmb3IgKHZlY3RvcjxwbnQ+Ojpjb25zdF9pdGVyYXRvciBpID0gdi5iZWdpbigpIDsgaSAhPSB2LmVuZCgpIDsgaSsrKSB7CgkJY291dCA8PCBpLT5udW0gPDwgIiAiIDw8IGktPmhhcyA8PCBlbmRsOwoJfQoJZmlsdGVyIGY7Cglmb3IgKHZlY3RvcjxwbnQ+Ojpjb25zdF9pdGVyYXRvciBpID0gdi5iZWdpbigpIDsgaSAhPSB2LmVuZCgpIDsgaSsrKSB7CgkJaWYgKGktPmhhcykgewoJCQlmLnNlZW4uaW5zZXJ0KGktPm51bSk7CgkJfQoJfQoJdi5lcmFzZShyZW1vdmVfaWYodi5iZWdpbigpLCB2LmVuZCgpLCBmKSwgdi5lbmQoKSk7Cgljb3V0IDw8ICJBZnRlcjoiIDw8IGVuZGw7Cglmb3IgKHZlY3RvcjxwbnQ+Ojpjb25zdF9pdGVyYXRvciBpID0gdi5iZWdpbigpIDsgaSAhPSB2LmVuZCgpIDsgaSsrKSB7CgkJY291dCA8PCBpLT5udW0gPDwgIiAiIDw8IGktPmhhcyA8PCBlbmRsOwoJfQoJcmV0dXJuIDA7Cn0=