Bagaimana untuk Cekap Mencari Elemen dalam Vektor Struktur Menggunakan std::find_if?

Barbara Streisand
Lepaskan: 2024-11-01 09:15:03
asal
247 orang telah melayarinya

How to Efficiently Find Elements in a Vector of Structs Using std::find_if?

Mencari Elemen dalam Vektor Struktur menggunakan std::find

Apabila bekerja dengan struktur data yang kompleks seperti struct, mencari melalui vektor elemen tersebut boleh menjadi mencabar . Dalam konteks ini, fungsi std::find menyediakan penyelesaian untuk mengenal pasti elemen tertentu dalam vektor.

Pertimbangkan definisi struct seperti ini:

<code class="cpp">struct monster 
{
    DWORD id;
    int x;
    int y;
    int distance;
    int HP;
};</code>
Salin selepas log masuk

Sekarang, katakan kita mempunyai vektor raksasa:

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

Untuk mencari elemen berdasarkan medan tertentu dalam struct, seperti ID raksasa, kita perlu menggunakan std::find_if dan bukannya std::find. std::find_if mengambil fungsi predikat sebagai hujah, yang membolehkan kami mentakrifkan kriteria carian.

Berikut ialah contoh menggunakan perpustakaan rangsangan:

<code class="cpp">it = std::find_if(bot.monsters.begin(), bot.monsters.end(), 
        boost::bind(&monster::id, _1) == currentMonster);</code>
Salin selepas log masuk

Atau, jika rangsangan bukan tersedia, anda boleh mencipta objek fungsi find_id anda sendiri seperti ini:

<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

Dengan menggunakan std::find_if dan fungsi predikat yang sesuai, anda boleh mencari dengan cekap melalui vektor struct untuk mencari elemen tertentu berdasarkan mereka pembolehubah ahli.

Atas ialah kandungan terperinci Bagaimana untuk Cekap Mencari Elemen dalam Vektor Struktur Menggunakan 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
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!