#include <iostream>
#include <vector>
#include <memory>
#include <algorithm>

struct someType {
  int value;
  someType(int val) : value(val) {}
};

int main() {
  std::vector<int> condition;
  std::vector<std::shared_ptr<someType>> container;

  condition.push_back(0);
  condition.push_back(1);
  condition.push_back(0);

  container.emplace_back(std::make_shared<someType>(1));
container.emplace_back(std::make_shared<someType>(2));
container.emplace_back(std::make_shared<someType>(3));

  container.erase(
    std::remove_if(
      container.begin(), container.end(),
      [&](const std::shared_ptr<someType> &s) {
      return condition[ &s - &(*container.begin()) ] == 1;
      }
    ),
    container.end()
  );

  for(auto &s : container)
    std::cout << s->value << std::endl;

  return 0;
}