Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Menyelesaikan Ralat Penyusunan Peta Tidak Tertib dengan Kekunci Pasangan?

Bagaimana untuk Menyelesaikan Ralat Penyusunan Peta Tidak Tertib dengan Kekunci Pasangan?

DDD
DDDasal
2024-12-16 06:41:25337semak imbas

How to Resolve Unordered Map Compilation Errors with Pair Keys?

Ralat Penyusunan Peta Tidak Tersusun dengan Kekunci Pasangan

Apabila cuba mencipta peta tidak tersusun di mana kuncinya berpasangan, anda mungkin menghadapi ralat berikut :

Implicit instantiation of undefined template 'std::__1::hash, std::__1::basic_string >>'

Ralat ini berlaku kerana peta tidak tersusun memerlukan fungsi cincang untuk ditakrifkan untuk jenis utama mereka. Manakala hash tersedia secara lalai, fungsi cincang tidak disediakan untuk pasangan.

Penyelesaian: Menyediakan Fungsi Cincang Tersuai

Untuk menyelesaikan isu ini, anda perlu menentukan fungsi cincang tersuai untuk jenis kunci pasangan anda. Berikut ialah contoh pelaksanaan:

struct pair_hash {
    template<class T1, class T2>
    size_t operator()(const pair<T1, T2>& p) const {
        auto h1 = hash<T1>()(p.first);
        auto h2 = hash<T2>()(p.second);
        return h1 ^ h2;
    }
};

Fungsi cincang ini menggabungkan nilai cincang bagi komponen individu pasangan menggunakan XOR bitwise (^).

Menggunakan Fungsi Cincang Tersuai

Setelah anda menentukan fungsi cincang, anda boleh menggunakannya untuk membuat peta tidak tertib dengan kekunci pasangan seperti berikut:

using Vote = pair<string, string>;
using Unordered_map = unordered_map<Vote, int, pair_hash>;

Unordered_map um;

Dengan pengubahsuaian ini, ralat kompilasi tidak akan berlaku lagi dan anda akan dapat menggunakan peta tidak tersusun seperti yang dijangkakan.

Atas ialah kandungan terperinci Bagaimana untuk Menyelesaikan Ralat Penyusunan Peta Tidak Tertib dengan Kekunci Pasangan?. 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