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
Lepaskan: 2024-10-29 22:14:02
asal
973 orang telah melayarinya

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>
Salin selepas log masuk
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>
Salin selepas log masuk
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>
Salin selepas log masuk
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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan