将函数转换为find_if lambda

convert function into find_if lambda

本文关键字:if lambda find 函数 转换      更新时间:2023-10-16

我在将函数转换为 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;
}

有人可以帮助我吗?

如注释中所述,如果您对找到项目的位置不感兴趣,只是对序列中任何地方至少有一个匹配的项目不感兴趣,您可以使用std::any_of并将其本质上设置为单行:

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

传递的 lambda 与 Kerrek 的版本相同,但可以直接使用返回值。

像这样:

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

(您if声明中item == i->GetName();的语句没有效果,所以我省略了它。