Mengakses Elemen dalam Peta Konst dengan Operator[] vs. at()
Apabila bekerja dengan std::map malar, mengakses elemen menggunakan operator[] boleh menjadi masalah. Walaupun ia mungkin kelihatan intuitif untuk menggunakan kaedah ini, ia gagal untuk menyusun. Ini kerana pengendali[] menjangkakan peta bukan const untuk mengubah suai peta jika kunci tidak wujud.
Walau bagaimanapun, terdapat kaedah alternatif, at(), yang diperkenalkan dalam C 11 khusus untuk tujuan ini. Tidak seperti operator[], at() melontarkan pengecualian std::out_of_range jika kunci tidak wujud, dan bukannya memasukkan elemen binaan lalai.
Tingkah laku ini sejajar dengan konsep peta malar. Dengan mentakrifkan kelebihan beban const at(), ia membenarkan akses yang selamat dan cekap kepada elemen tanpa potensi untuk pengubahsuaian yang tidak disengajakan.
Untuk menggambarkan, pertimbangkan contoh berikut:
#include <iostream> #include <map> int main() { std::map<int, char> A; A[1] = 'b'; A[3] = 'c'; const std::map<int, char> B = A; std::cout << B.at(3) << std::endl; // works std::cout << B[3] << std::endl; // cannot access (compile error) }
Dalam senario ini, menggunakan operator[] pada B akan mengakibatkan ralat masa kompilasi, kerana ia adalah peta const dan tidak boleh diubah suai. Walau bagaimanapun, kaedah at() berfungsi dengan sempurna kerana ia menyedari sifat const peta dan membuang pengecualian jika kunci tidak wujud.
Oleh itu, untuk mengakses elemen dalam const std::map, at() ialah pendekatan yang disyorkan dan lebih selamat untuk mengelakkan pengubahsuaian yang tidak diingini. Maklumat lanjut tentang ciri ini boleh didapati dalam piawaian C 11 atau dokumentasi yang berkaitan dengan kelas std::map.
Atas ialah kandungan terperinci Const std::map Akses: `operator[]` lwn. `at()` – Mana Yang Perlu Anda Gunakan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!