将函数转换为std :: find_if lamnda时遇到一些麻烦。 下面你可以看到我的功能
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;
}
有人可以帮助我吗?
答案 0 :(得分: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
无效,所以我省略了它。)
答案 1 :(得分:2)
如评论中所述,如果您对找到某个项目的位置不感兴趣,只需在序列中的任何位置至少有一个匹配项目,您可以使用std::any_of
和使这基本上是一个单行:
return std::any_of(m_RoomItems.begin(),
m_RoomItems.end(),
[&](Item const& x) { return x.GetName() == item; });
传递的lambda与Kerrek的版本相同,但返回值可以直接使用。