使用std::find 搜尋結構體向量
使用結構體等複雜資料結構的向量時,內建std::find 函數就不夠用了。使用一個簡單的範例,我們將探索如何克服此限制。
考慮以下結構:<code class="cpp">struct monster { DWORD id; int x; int y; int distance; int HP; };</code>
怪物組成的向量 名為 bot.monsters。要搜尋具有特定 ID 的怪物,我們可以使用 std::find,但由於 ID 是 monster 結構的成員,我們需要告訴函數如何存取它。
std::find_if 函數提供了一種指定自訂條件的方法。我們可以定義一個lambda 函數,從每個怪物中提取ID 並將其與我們的目標ID 進行比較:
<code class="cpp">it = std::find_if(bot.monsters.begin(), bot.monsters.end(), boost::bind(&monster::id, _1) == currentMonster);</code>
currentMonster ID。
如果你沒有權限訪問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>
std::find_if 和自訂條件,我們可以根據複雜資料結構的向量有效地搜尋它們特定的成員值,為資料操作提供更大的靈活性。
以上是如何根據內部屬性搜尋結構體向量:std::find_if 指南的詳細內容。更多資訊請關注PHP中文網其他相關文章!