Bagaimanakah anda boleh menggunakan nilai titik terapung dengan selamat sebagai kunci dalam `std::map` dan mengelakkan tingkah laku yang tidak dijangka?

Mary-Kate Olsen
Lepaskan: 2024-11-12 14:57:02
asal
256 orang telah melayarinya

How can you safely use floating point values as keys in `std::map` and avoid unexpected behavior?

Kekunci Titik Terapung dalam std::map: Mengelakkan Perbandingan dengan Epsilon

Apabila menggunakan dua jenis sebagai kekunci dalam std::map, isu ketepatan titik terapung boleh timbul . Membandingkan nilai menggunakan ambang epsilon, walaupun biasa digunakan, boleh melanggar keperluan pesanan kontena dan membawa kepada tingkah laku yang tidak ditentukan.

Untuk menangani perkara ini, pendekatan yang lebih selamat adalah untuk menentukan operator perbandingan tersuai untuk mengendalikan nilai NaN dan mengelakkan kunci langsung perbandingan. Selain itu, menggunakan std::multimap atau std::multiset boleh menampung berbilang nilai kunci, mengurangkan risiko tingkah laku yang tidak dijangka.

Untuk melakukan carian anggaran menggunakan kekunci berganda, fungsi pembantu boleh digunakan untuk mengembalikan julat elemen yang hampir dengan nilai sasaran, dikawal oleh parameter epsilon. Julat ini kemudiannya boleh diulang untuk mencari kunci yang diingini jika ia wujud. Sebagai alternatif, fungsi semakan kewujudan utama boleh dilaksanakan berdasarkan carian julat.

Secara umumnya dinasihatkan untuk mengelak daripada menggunakan nilai titik terapung sebagai kekunci dalam std::set atau std::map kerana potensinya untuk diperkenalkan kesilapan. Mengecualikan mereka daripada antara muka yang lebih tepat boleh mengurangkan risiko pepijat yang disebabkan oleh perbandingan nilai yang tidak dijangka. Walau bagaimanapun, menggunakannya untuk koleksi yang diisih secara automatik, di mana susunan yang tepat tidak kritikal, masih boleh memberi manfaat.

Atas ialah kandungan terperinci Bagaimanakah anda boleh menggunakan nilai titik terapung dengan selamat sebagai kunci dalam `std::map` dan mengelakkan tingkah laku yang tidak dijangka?. 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