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

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

4

2 回答 2

11

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

于 2013-05-27T06:48:34.600 回答
4

为什么不使用boost::ptr_set instread?

于 2013-05-27T06:49:04.700 回答