使用 std::find 在结构向量中查找元素
在向量中搜索特定元素可能具有挑战性,尤其是在处理自定义结构。本问题探讨了一种通过针对特定成员变量来定位结构向量中的元素的有效方法。
考虑提供的具有各种属性的结构怪物。目标是在向量怪物中搜索具有特定 ID 值的怪物。仅标准 std::find 函数不足以完成此任务,因为它比较整个结构,而不是单个成员变量。
要克服此限制,一种解决方案是使用 std::find_if 函数。 std::find_if 将谓词作为其第三个参数,允许自定义比较标准。在这种情况下,谓词将检查向量中每个怪物的 id 成员变量。
以下代码片段演示了如何将 std::find_if 与 Boost 库函数一起使用:
<code class="cpp">it = std::find_if(bot.monsters.begin(), bot.monsters.end(), boost::bind(&monster::id, _1) == currentMonster);</code>
如果您无法访问 Boost,您可以定义自定义函数对象来实现相同的结果:
<code class="cpp">struct find_id : std::unary_function<monster, bool> { DWORD id; find_id(DWORD id) : id(id) {} bool operator()(monster const& m) const { return m.id == id; } }; it = std::find_if(bot.monsters.begin(), bot.monsters.end(), find_id(currentMonster));</code>
这些解决方案有效地遍历向量,根据每个怪物的 id 成员变量检查目标 ID,如果找到则返回指向匹配元素的迭代器。
以上是如何使用特定成员变量有效地查找结构体向量中的元素?的详细内容。更多信息请关注PHP中文网其他相关文章!