Rumah > pembangunan bahagian belakang > C++ > Mengapa Kekunci `char*` Gagal dalam `std::map` dan Bagaimana Saya Boleh Membetulkannya?

Mengapa Kekunci `char*` Gagal dalam `std::map` dan Bagaimana Saya Boleh Membetulkannya?

Linda Hamilton
Lepaskan: 2024-12-26 04:49:15
asal
541 orang telah melayarinya

Why Do `char*` Keys Fail in `std::map`, and How Can I Fix It?

Kerisauan char* Kekunci dalam std::map

Apabila berurusan dengan bekas berasaskan cincang seperti std::map, memahami kunci jenis adalah penting. Isu pelik timbul apabila menggunakan char* sebagai kunci peta, seperti yang digambarkan dalam kod berikut:

std::map<char*, int> g_PlayerNames;
Salin selepas log masuk

Kod ini cuba menyimpan nama Pemain (char*) sebagai kunci dan integer yang sepadan sebagai nilai. Walau bagaimanapun, apabila mencari entri menggunakan nama yang diketahui, perbandingannya gagal, membawa kepada hasil yang tidak dijangka.

Punca utama terletak pada sifat pelik char sebagai kunci. std::map membandingkan kunci secara lalai menggunakan operator kurang daripada (<). Walau bagaimanapun, untuk penunjuk char, perbandingan ini menyemak alamat penuding dan bukannya rentetan yang ditunjukkan.

Untuk menyelesaikan isu ini, kami perlu menyediakan fungsi perbandingan tersuai yang beroperasi pada rentetan sebenar, bukan petunjuk. Memperkenalkan struct seperti berikut membolehkan kami melakukan ini:

struct cmp_str
{
    bool operator()(char const *a, char const *b) const
    {
        return std::strcmp(a, b) < 0;
    }
};
Salin selepas log masuk

Dengan menyediakan fungsi perbandingan tersuai ini, kami mengarahkan std::map untuk membandingkan kekunci char* berdasarkan rentetan yang dirujuk, memastikan kekunci yang betul padanan semasa carian dan sisipan.

Jadi, daripada menggunakan takrifan peta asal, kami mengubah suainya untuk memasukkan perbandingan fungsi:

map g_PlayerNames;

Dengan pengubahsuaian ini, carian nama pemain dan fungsi logik kemas kini seperti yang dimaksudkan, menggunakan fungsi perbandingan untuk memadankan kekunci char* berdasarkan kandungan rentetannya.

Atas ialah kandungan terperinci Mengapa Kekunci `char*` Gagal dalam `std::map` dan Bagaimana Saya Boleh Membetulkannya?. 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