搜索一组独特的指针

Chr*_*ris 5 c++ set unique-ptr c++11

我有一组指向对象的唯一指针.有时,我会透露一些指向这些对象的原始指针,因此代码的其他部分可以对这些对象进行处理.此代码不知道指针是否指向由某组唯一指针维护的对象,因此我需要检查指针指向的对象是否在唯一的指针集中.

在简单的代码中:

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
Run Code Online (Sandbox Code Playgroud)

我理解为什么代码不能编译,但我想不出用STL搜索元素的方法.有什么能满足我的需求,还是我必须手动迭代集合的所有元素?

Ash*_*sha 6

你可以std::find_if像这样使用: std::find_if(numbers.begin(), numbers.end(), [&](std::unique_ptr<int>& p) { return p.get() == x;});

  • 这将失去`set`的所有效率,因为它将是线性访问. (9认同)
  • @Asha我认为Nicol的观点更多的是通常的`std :: set <> :: find()`在子线性时间内完成它.这是真的...... (2认同)

mum*_*umu 5

为什么不使用boost::ptr_set来代替呢?