Bolehkah saya menggunakan Pasangan sebagai Kekunci dalam Peta Tidak Tertib?
Dalam C , anda boleh menghadapi ralat penyusunan apabila menggunakan unordered_map dengan pasangan sebagai kuncinya. Isu timbul daripada menggunakan jenis tersuai sebagai kunci, tanpa menyediakan fungsi cincang yang sesuai untuknya.
Memahami Ralat
Ralat yang anda hadapi adalah kerana unordered_map bergantung pada mekanisme pencincangan untuk mengesan pasangan nilai kunci dengan cekap. Walau bagaimanapun, ia tidak mempunyai fungsi cincang lalai untuk jenis kompleks seperti pasangan. Mesej ralat menunjukkan bahawa pengkompil tidak boleh secara tersirat membuat seketika fungsi cincang yang tidak ditentukan untuk jenis kunci pasangan anda.
Penyelesaian: Menyediakan Fungsi Cincang
Untuk menyelesaikan isu ini, anda perlu menentukan fungsi cincang yang mengira nilai cincang unik untuk jenis pasangan Undi anda. Fungsi ini harus menerima pasangan sebagai argumen dan mengeluarkan nilai cincang.
Berikut ialah contoh pelaksanaan fungsi cincang:
struct pair_hash { template<class T1, class T2> std::size_t operator()(const std::pair<T1, T2> &p) const { auto h1 = std::hash<T1>()(p.first); auto h2 = std::hash<T2>()(p.second); return h1 ^ h2; } };
Dengan fungsi cincang ini, anda boleh mengubah suai kod anda untuk mencipta unordered_map yang menggunakan pasangan sebagai kunci:
using Vote = std::pair<std::string, std::string>; using Unordered_map = std::unordered_map<Vote, int, pair_hash>;
Kini, anda boleh menggunakan unordered_map ini seperti yang dimaksudkan, mengelakkan ralat penyusunan.
Atas ialah kandungan terperinci Bolehkah saya Menggunakan Pasangan sebagai Kunci dalam Peta Tidak Tersusun C, dan Bagaimana?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!