搜尋自訂結構向量時,您可能會在隔離和迭代特定元素時遇到困難。本文探討了使用 C 的標準函式庫函數來解決此問題的方法。
問題:
考慮以下結構:
<code class="cpp">struct monster { DWORD id; int x; int y; int distance; int HP; };</code>
建立這些結構的向量:
<code class="cpp">std::vector<monster> monsters;</code>
您希望🎜>您希望根據其id 元素在向量中搜尋特定的怪物。
解決方案:
要根據特定欄位搜尋元素,請使用 std::find_if 函數而不是 std::find。 std::find_if 允許您指定過濾向量元素的謂詞函數。
這裡有兩種使用 std::find_if:
1 來實現此目的的方法。使用Boost 函式庫:
如果您有可用的Boost 函式庫,則可以使用下列程式碼:
<code class="cpp">it = std::find_if(bot.monsters.begin(), bot.monsters.end(), boost::bind(&monster::id, _1) == currentMonster);</code>
2.建立自訂函數物件:
如果沒有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; } };</code>
然後在std::find_if 中使用此函數物件:
<code class="cpp">it = std::find_if(bot.monsters.begin(), bot.monsters.end(), find_id(currentMonster));</code>
這將迭代怪物向量並蒐索具有指定id 的怪物。然後可以使用 std::find_if 傳回的迭代器來存取找到的怪物。
以上是如何使用 C 有效地在結構體向量中尋找特定怪物?的詳細內容。更多資訊請關注PHP中文網其他相關文章!