Поиск набора уникальных указателей

У меня есть набор уникальных указателей, указывающих на объекты. Иногда я обнаруживаю некоторые из исходных указателей на эти объекты, поэтому другие части кода могут делать вещи с объектами. Этот код не знает, указывают ли указатели на объекты, поддерживаемые определенным набором уникальных указателей, или нет, поэтому мне нужно проверить, находится ли объект, на который указывает указатель, в уникальный набор указателей.

В простом коде:

int* x = new int(42);
std::set<std::unique_ptr<int>> numbers;
numbers.insert(std::unique_ptr<int>(x));
numbers.find(x) // does not compile
</int></std::unique_ptr<int>

Я понимаю, почему код не компилируется, но я не могу придумать способ поиска элемента с STL. Есть ли что-нибудь, что удовлетворяет мои потребности, или мне придется перебирать все элементы набора вручную?

2 ответа

Вы можете использовать std::find_if следующим образом: std::find_if(numbers.begin(), numbers.end(), [&](std::unique_ptr<int>& p) { return p.get() == x;});</int>


Почему бы не использовать boost:: ptr_set instread?

licensed under cc by-sa 3.0 with attribution.