Rumah >pembangunan bahagian belakang >C++ >Mengapakah `std::unordered_map` Menggunakan Open Hashing?

Mengapakah `std::unordered_map` Menggunakan Open Hashing?

Barbara Streisand
Barbara Streisandasal
2024-12-05 06:08:11880semak imbas

Why Does `std::unordered_map` Use Open Hashing?

Pelaksanaan std::unordered_map

Dengan analisis piawaian C, menjadi jelas bahawa pelaksanaan std::unordered_map mesti menggunakan kaedah yang dikenali sebagai pencincangan terbuka, juga dikenali sebagai rantaian berasingan. Kaedah ini terdiri daripada tatasusunan baldi, setiap satu memegang kepala senarai terpaut, yang membolehkan lelaran yang cekap tanpa memintas baldi kosong.

Pilihan pencincangan terbuka dibuat secara sengaja untuk memenuhi keperluan prestasi khusus yang digariskan dalam C standard. Pertama, faktor beban maksimum lalai ditetapkan kepada 1.0, yang bermaksud bahawa jadual akan mengubah saiz apabila saiz akan melebihi kiraan baldi dengan faktor 1.0. Kedua, jadual dijamin tidak akan dirombak semula melainkan ia dibesarkan melebihi faktor beban tersebut. Keperluan ini menjadikan pencincangan terbuka perlu kerana pencincangan tertutup menjadi tidak praktikal apabila faktor beban menghampiri 1 disebabkan oleh perlanggaran yang berlebihan.

Walaupun sesetengah pihak berpendapat bahawa pencincangan terbuka bukanlah kaedah yang paling berkesan untuk semua kes penggunaan, ia kekal sebagai pilihan yang munasabah untuk kegunaan umum kerana pengendalian perlanggaran yang boleh dipercayai, kebolehsuaian kepada jenis kunci/nilai pelbagai saiz, dan kecekapan keseluruhan dalam mengendalikan jumlah sisipan dan pemadaman tanpa penurunan prestasi.

Oleh itu, std::unordered_map memanfaatkan pencincangan terbuka untuk memenuhi keperluan prestasi yang ditentukan dan kekal sebagai pilihan yang mantap untuk kebanyakan aplikasi kerana kepelbagaian dan kecekapannya.

Atas ialah kandungan terperinci Mengapakah `std::unordered_map` Menggunakan Open Hashing?. 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