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实现一个方法或仿函数会是一个太大的开销.
做你想做的事的惯用和优雅方式是:
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::vector
和std:shared_ptr
,你显然已经使用STL了.那为什么不用std::find_if
?如果您不能使用C++ 11 lambda表达式,则始终可以使用函数对象.