Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Cekap Mencari Raksasa Tertentu dalam Vektor Struktur menggunakan C ?

Bagaimana untuk Cekap Mencari Raksasa Tertentu dalam Vektor Struktur menggunakan C ?

Linda Hamilton
Linda Hamiltonasal
2024-10-31 05:37:02604semak imbas

How to Efficiently Find Specific Monsters in a Vector of Structs using C  ?

Mencari Raksasa dalam Vektor

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!

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