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
Patricia Arquetteasal
2024-12-23 17:52:14438semak imbas

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)
    {
        // ...
    }
    // ...
}

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;

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!

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