使用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中文網其他相關文章!