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 に答える