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>
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.
Fungsistd::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>
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>
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!