首頁 > 後端開發 > C++ > 如何根據內部屬性搜尋結構體向量:std::find_if 指南

如何根據內部屬性搜尋結構體向量:std::find_if 指南

Mary-Kate Olsen
發布: 2024-10-29 22:14:02
原創
972 人瀏覽過

How to Search Vectors of Structs Based on Internal Properties: A Guide to std::find_if

使用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>
登入後複製
這個lambda 函數有效地過濾向量,迭代每個怪物,如果其ID與目標ID 匹配,則傳回true指定

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>
登入後複製
這個自訂函數物件允許我們可以執行相同的搜索,但不需要 Boost。

透過使用

std::find_if 和自訂條件,我們可以根據複雜資料結構的向量有效地搜尋它們特定的成員值,為資料操作提供更大的靈活性。

以上是如何根據內部屬性搜尋結構體向量:std::find_if 指南的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板