У меня есть набор общих указателей:
std::set<boost::shared_ptr<T>> set;
И указатель:
T* p;
Я бы хотел эффективно удалить элемент set
, равный p
, но я не могу сделать это ни с одним из членов набора, или с любым из стандартных алгоритмов, поскольку T*
- это совершенно другой тип, чем boost::shared_ptr<T>
.
Вот несколько подходов, о которых я могу подумать:
- каким-то образом создаёт новый shared_ptr из указателя, который не станет владельцем указанной памяти (идеальное решение, но я не вижу, как это сделать)
- упаковка / повторная реализация shared_ptr, чтобы я мог сделать выше
- просто делаю собственный бинарный поиск по набору