C++ C++;find_if-如何查找ID(int(

C++ C++;find_if-如何查找ID(int(,c++,lambda,C++,Lambda,我想找到如何使用find_if根据ID查找SceneNode。但我不确定如何做到这一点 例如,我可以这样做,根据实际指针删除场景节点,如下所示: SceneNode::Ptr SceneNode::detachChild(const SceneNode& node) { auto found = std::find_if(mChildren.begin(), mChildren.end(), [&](Ptr& p) -> bool {return p.get

我想找到如何使用find_if根据ID查找SceneNode。但我不确定如何做到这一点

例如,我可以这样做,根据实际指针删除场景节点,如下所示:

SceneNode::Ptr SceneNode::detachChild(const SceneNode& node)
{
    auto found = std::find_if(mChildren.begin(), mChildren.end(), [&](Ptr& p) -> bool {return p.get() == &node; });
    ...
但我不确定如何处理find_,如果我正在寻找SceneNodes中间变量(它是一个INT)


有没有人能为我提供一些好的网站或信息来解释find_(如果好的话)?谢谢!

我想你想要这样的东西:

SceneNode::Ptr SceneNode::findChild(int findID)
{
    auto found = std::find_if(std::begin(mChildren), std::end(m_children),
        [=](Ptr& p) { return p->mID == findID; }
    );

    // ...
}

此lambda将按值捕获
findID
,并将其与
Ptr
指向的
mID
成员进行比较。

您基本上拥有它

auto found = std::find_if(
   mChildren.begin(),
   mChildren.end(),
   [&](Ptr& p) -> bool { return p->mID == node.mID; }
);

根据您的第一个示例,似乎
Ptr&
mChildren.begin().operator*()
(或兼容的东西)的结果

因此:


mChildren
的声明是什么?某种智能指针的容器?为什么要删除lambda?您离得太近了…只需使用
.mID
?访问成员即可。在第一个示例中,似乎
Ptr::get()需要调用
以获取实际指针…如果它类似于
std::shared\u ptr
,则
->
运算符重载。不需要
get()
在这种情况下。说得好。至少这些答案中的重复可能有点让人放心…:是的,我们都在同一条轨道上。我是第一个。8vD
auto found = std::find_if(
   mChildren.begin(),
   mChildren.end(),
   [&](Ptr& p) -> bool { return p->mID == node.mID; }
);
SceneNode::Ptr SceneNode::findChild(int findID)
{
    auto found = std::find_if(
        mChildren.begin(), mChildren.end(),
        [findID](Ptr &ptr)
        {
            return findID == ptr.get()->mID;
        });

     ...
}