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
Lepaskan: 2024-10-31 05:37:02
asal
641 orang telah melayarinya

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

Mencipta vektor struct ini:

<code class="cpp">std::vector<monster> monsters;</code>
Salin selepas log masuk

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

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

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

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!

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