fork download
  1. #include <iostream>
  2. #include <vector>
  3. #include <set>
  4. #include <functional>
  5. #include <algorithm>
  6. using namespace std;
  7.  
  8. struct pnt {
  9. int num;
  10. bool has;
  11. };
  12.  
  13. struct filter {
  14. set<int> seen;
  15. bool operator()(const pnt& p) {
  16. return !p.has && (seen.find(p.num) != seen.end());
  17. }
  18. };
  19.  
  20. int main() {
  21. pnt data[] = {
  22. {3,true}, {4, true}, {4, false}, {3, true}, {5, false}, {5, true}, {7, false}, {8, false}, {9, false}, {10, true}, {10, false}
  23. };
  24. vector<pnt> v(data, data+11);
  25. cout << "Before:" << endl;
  26. for (vector<pnt>::const_iterator i = v.begin() ; i != v.end() ; i++) {
  27. cout << i->num << " " << i->has << endl;
  28. }
  29. filter f;
  30. for (vector<pnt>::const_iterator i = v.begin() ; i != v.end() ; i++) {
  31. if (i->has) {
  32. f.seen.insert(i->num);
  33. }
  34. }
  35. v.erase(remove_if(v.begin(), v.end(), f), v.end());
  36. cout << "After:" << endl;
  37. for (vector<pnt>::const_iterator i = v.begin() ; i != v.end() ; i++) {
  38. cout << i->num << " " << i->has << endl;
  39. }
  40. return 0;
  41. }
Success #stdin #stdout 0s 3432KB
stdin
Standard input is empty
stdout
Before:
3 1
4 1
4 0
3 1
5 0
5 1
7 0
8 0
9 0
10 1
10 0
After:
3 1
4 1
3 1
5 1
7 0
8 0
9 0
10 1