2015-07-20 47 views
0

我想找到如何使用find_if來查找基於ID的場景結點,我不確定如何做雖然這C++ find_if - 如何找到一個ID(INT(

我能夠例如,這樣做是爲了去除根據實際指針像這樣的場景節點:

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

,但我對如何處理find_if如果我找SceneNodes MID變量(這是一個INT)不確定

。 IE

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

有沒有人有任何可以解釋find_if的好網站或信息?謝謝!

+0

什麼'mChildren'的聲明?某種智能指針的容器? –

+2

你爲什麼刪除lambda?你非常親密......只需使用'.mID'訪問成員?? –

回答

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; } 
    ); 

    // ... 
} 

這拉姆達將值捕捉findID,並將它與什麼Ptr點的mID成員進行比較。

+0

在第一個例子中,似乎需要調用'Ptr :: get()'來獲得一個實際的指針...... – defube

+1

如果它像'std :: shared_ptr',' - >'運算符超載。在這種情況下不需要'get()'。 –

+0

好點。至少在這些答案中的重複可能有點讓人放心...:P – defube

1

你基本上有它...

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

根據您的第一個例子,則顯得Ptr &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; 
     }); 

    ... 
}