在tr1 :: shared_ptr的向量中查找元素

anh*_*ppe 2 c++ boost stl find shared-ptr

我已将自定义类型"MyType"包装在智能指针中:

tr1::shared_ptr<MyType>
Run Code Online (Sandbox Code Playgroud)

并从中制作了一个矢量:

vector<shared_ptr<MyType>>
Run Code Online (Sandbox Code Playgroud)

现在我想在该向量std::find中输入一个类型的对象MyType但是因为我需要的类型不能shared_ptr<MyType>.

有优雅的方式吗?谢谢

更新:为什么不std :: find_if:std :: find的使用非常紧凑.我认为为find_if实现一个方法或仿函数会是一个太大的开销.

Tem*_*Rex 8

做你想做的事的惯用和优雅方式是:

std::vector<std::shared_ptr<MyType>> v;

// init v here;

MyType my_value;

// init my_value here;

auto it = std::find_if(v.begin(), v.end(), [&](std::shared_ptr<MyType> const& p) {
    return *p == my_value; // assumes MyType has operator==
});

if (it != v.end()) { /* do what you want with the value found */ }
Run Code Online (Sandbox Code Playgroud)

如果你可以使用std::vectorstd:shared_ptr,你显然已经使用STL了.那为什么不用std::find_if?如果您不能使用C++ 11 lambda表达式,则始终可以使用函数对象.