Rumah >pembangunan bahagian belakang >C++ >Cara Mencari Vektor Struktur Berdasarkan Sifat Dalaman: Panduan untuk std::find_if

Cara Mencari Vektor Struktur Berdasarkan Sifat Dalaman: Panduan untuk std::find_if

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-10-29 22:14:02974semak imbas

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

Mencari Vektor Struktur dengan std::find

Apabila bekerja dengan vektor struktur data kompleks seperti struct, terbina dalam std::find menjadi tidak mencukupi jika anda perlu mencari elemen tertentu berdasarkan sifat dalaman mereka. Menggunakan contoh mudah, kami akan meneroka cara untuk mengatasi had ini.

Pertimbangkan struct berikut:

<code class="cpp">struct monster { 
    DWORD id;
    int x;
    int y;
    int distance;
    int HP;
};</code>
Sekarang, katakan anda mempunyai vektor

raksasa bernama bot.monsters. Untuk mencari raksasa dengan ID tertentu, kita boleh menggunakan std::find, tetapi memandangkan ID ialah ahli struct raksasa, kita perlu memberitahu fungsi bagaimana untuk aksesnya.

Fungsi

std::find_if menyediakan cara untuk menentukan kriteria tersuai. Kami boleh mentakrifkan fungsi lambda yang mengekstrak ID daripada setiap raksasa dan membandingkannya dengan ID sasaran kami:

<code class="cpp">it = std::find_if(bot.monsters.begin(), bot.monsters.end(), 
        boost::bind(&monster::id, _1) == currentMonster);</code>
Fungsi lambda ini menapis vektor dengan berkesan, berulang melalui setiap raksasa dan mengembalikan benar jika IDnya sepadan dengan ditentukan

currentMonster ID.

Jika anda tidak mempunyai akses kepada perpustakaan Boost, anda boleh menulis objek fungsi anda sendiri:

<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>
Objek fungsi tersuai ini membenarkan kami untuk melakukan carian yang sama, tetapi tanpa memerlukan Boost.

Dengan menggunakan

std::find_if dan kriteria tersuai, kami boleh mencari dengan berkesan melalui vektor struktur data kompleks berdasarkan mereka nilai ahli tertentu, memberikan lebih fleksibiliti dalam manipulasi data.

Atas ialah kandungan terperinci Cara Mencari Vektor Struktur Berdasarkan Sifat Dalaman: Panduan untuk std::find_if. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn