Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Saya Boleh Menggunakan `char*` Secara Berkesan sebagai Kekunci dalam C `std::map`?

Bagaimanakah Saya Boleh Menggunakan `char*` Secara Berkesan sebagai Kekunci dalam C `std::map`?

Patricia Arquette
Lepaskan: 2024-12-23 17:52:14
asal
385 orang telah melayarinya

How Can I Use `char*` Effectively as Keys in a C   `std::map`?

Menggunakan char* Berkesan sebagai std::map Keys

Dalam C , menggunakan char* sebagai kunci dalam std::map boleh menimbulkan cabaran. Pertimbangkan coretan kod berikut yang cuba mencari nama pemain yang tidak digunakan:

std::map<char*, int> g_PlayerNames;

int PlayerManager::CreateFakePlayer()
{
    // ...
    for(std::map<char*, int>::iterator it = g_PlayerNames.begin(); it != g_PlayerNames.end(); ++it)
    {
        // ...
    }
    // ...
}
Salin selepas log masuk

Kod ini mungkin tidak berfungsi seperti yang dimaksudkan kerana perbandingan lalai untuk char* dalam std::map membandingkan penunjuk itu sendiri, bukan yang sebenar rentetan yang ditamatkan nol yang mereka tunjuk kepada.

Resolusi

Untuk menangani isu ini, anda mesti menyediakan fungsi perbandingan pada peta. Functor ini harus membandingkan rentetan yang ditunjukkan oleh kekunci char*. Berikut ialah contoh:

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

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

Dengan menggabungkan fungsi cmp_str, peta kini membandingkan rentetan sebenar, membenarkan logik yang dimaksudkan untuk beroperasi dengan betul.

Ingat, teknik ini digunakan untuk mana-mana senario di mana anda berhasrat untuk menggunakan penunjuk sebagai kunci dalam std::map. Dengan menyediakan functor perbandingan, anda memastikan bahawa peta beroperasi seperti yang dikehendaki, membandingkan nilai sebenar yang diwakili oleh penunjuk.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menggunakan `char*` Secara Berkesan sebagai Kekunci dalam C `std::map`?. 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