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

时间:2015-07-20 21:16:45

标签: c++ lambda

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

我能够做到这一点,这样做可以根据实际指针删除SceneNode,如下所示:

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

但如果我正在寻找SceneNodes mID变量(这是一个INT),我不确定如何处理find_if。

SceneNode::Ptr SceneNode::findChild(int findID)
{
    auto found = std::find_if(mChildren.begin(), mChildren.end(), ... ? = findID?; });
    ...

有没有人对我有任何好的网站或信息解释find_if?谢谢!

3 个答案:

答案 0 :(得分:1)

你基本上拥有它......

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

答案 1 :(得分:1)

根据您的第一个示例,mChildren.begin().operator*()似乎是SceneNode::Ptr SceneNode::findChild(int findID) { auto found = std::find_if( mChildren.begin(), mChildren.end(), [findID](Ptr &ptr) { return findID == ptr.get()->mID; }); ... } (或兼容的东西)的结果。

所以:

    private void ReleaseOfficeObject(object o)
    {
        Marshal.ReleaseComObject(o);
        GC.Collect();
        GC.WaitForPendingFinalizers();
        Marshal.FinalReleaseComObject(o);
        GC.Collect();
        GC.WaitForPendingFinalizers();
        GC.Collect();
    }

答案 2 :(得分:0)

我想你想要这样的东西:

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,并将其与mID指向的Ptr成员进行比较。