Apabila mencari melalui vektor struct tersuai, anda mungkin menghadapi kesukaran untuk mengasingkan dan mengulang elemen tertentu. Artikel ini meneroka penyelesaian kepada masalah ini menggunakan fungsi perpustakaan standard C.
Masalah:
Pertimbangkan struct berikut:
<code class="cpp">struct monster { DWORD id; int x; int y; int distance; int HP; };</code>
Mencipta vektor struct ini:
<code class="cpp">std::vector<monster> monsters;</code>
Anda ingin mencari raksasa tertentu dalam vektor berdasarkan elemen idnya.
Penyelesaian:
Untuk mencari elemen berdasarkan medan tertentu, gunakan fungsi std::find_if dan bukannya std::find . std::find_if membolehkan anda menentukan fungsi predikat yang menapis elemen vektor.
Berikut ialah dua cara untuk mendekati ini menggunakan std::find_if:
1. Menggunakan Perpustakaan Boost:
Jika anda mempunyai perpustakaan Boost tersedia, anda boleh menggunakan kod berikut:
<code class="cpp">it = std::find_if(bot.monsters.begin(), bot.monsters.end(), boost::bind(&monster::id, _1) == currentMonster);</code>
2. Mencipta Objek Fungsi Tersuai:
Jika anda tidak mempunyai Boost, cipta objek fungsi tersuai seperti berikut:
<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; } };</code>
Kemudian gunakan objek fungsi ini dalam std::find_if :
<code class="cpp">it = std::find_if(bot.monsters.begin(), bot.monsters.end(), find_id(currentMonster));</code>
Ini akan berulang melalui vektor raksasa dan mencari raksasa dengan id yang ditentukan. Iterator yang dikembalikan oleh std::find_if kemudiannya boleh digunakan untuk mengakses raksasa yang ditemui.
Atas ialah kandungan terperinci Bagaimana untuk Cekap Mencari Raksasa Tertentu dalam Vektor Struktur menggunakan C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!