2017-05-08 40 views
-2

我有一些麻烦将我的函数转换为std :: find_if landa。 下面你可以看到我的功能将函数转换为find_if lambda

bool Room::ItemInRoomPresent(std::string & item) 
{ 
    bool isPresent = false; 
    for (std::vector<Item>::iterator i = m_RoomItems.begin(); i !=m_RoomItems.end(); i++) 
    { 
     if (i->GetName() == item) 
     { 
      item == i->GetName(); 
      isPresent = true; 
      break; 
     } 
    } 
    return isPresent; 
} 

有人能帮我吗?

+2

'std :: any_of'似乎比'std :: find_if'更合适。 – juanchopanza

回答

2

像这样:

auto it = std::find_if(m_RoomItems.begin(), m_RoomItems.end(), 
         [&](const Item& x) { return x.GetName() == item; }); 

return it != m_RoomItems.end(); 

(声明item == i->GetName();if声明没有任何效果,所以我省略了。)

+0

'return it!= m_RoomItems.end();'也许? :) – bipll

+0

@bipll:是的,当然,谢谢! –

2

正如在评论中指出,如果你不感兴趣可以使用std::any_of,并使其基本上成为一行:

return std::any_of(m_RoomItems.begin(), 
        m_RoomItems.end(), 
        [&](Item const& x) { return x.GetName() == item; }); 

传递的拉姆达是相同的Kerrek的版本,但返回值可以直接使用。