Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Saya Boleh Menggunakan Penunjuk sebagai Kekunci dalam std::map dengan Betul?

Bagaimanakah Saya Boleh Menggunakan Penunjuk sebagai Kekunci dalam std::map dengan Betul?

Barbara Streisand
Lepaskan: 2024-12-10 17:11:14
asal
661 orang telah melayarinya

How Can I Use Pointers as Keys in a std::map Correctly?

Menggunakan Penunjuk sebagai Kekunci dalam std::map

Apabila menggunakan penunjuk sebagai kunci dalam std::map, adalah penting untuk menentukan fungsi perbandingan untuk membolehkan perbandingan berdasarkan nilai runcing dan bukannya penunjuk sendiri.

Masalah:

Dalam coretan kod yang disediakan, anda menggunakan std::map, int> g_PlayerNames. Tanpa menyatakan functor perbandingan, peta membandingkan penunjuk char, yang mungkin menunjuk ke lokasi memori yang berbeza walaupun jika mereka merujuk rentetan yang ditamatkan nol yang sama.

Penyelesaian:

Untuk menyelesaikan masalah ini, gunakan fungsi perbandingan yang membandingkan rentetan yang ditamatkan nol yang ditunjuk oleh kekunci char*. Berikut ialah contoh:

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

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

Dalam contoh ini, struct cmp_str mentakrifkan fungsi operator() yang membandingkan rentetan runcing menggunakan std::strcmp. Ini memastikan bahawa kunci peta dibandingkan berdasarkan nilai rentetannya, bukan nilai penudingnya. Dengan menggunakan fungsi perbandingan ini, anda boleh memanipulasi peta dengan betul berdasarkan rentetan penamatan nol asas.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menggunakan Penunjuk sebagai Kekunci dalam std::map dengan Betul?. 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