2017-05-08 71 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的版本,但返回值可以直接使用。