Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Menggunakan Pasangan sebagai Kunci dalam Peta Tidak Tertib dalam C?

Bagaimana untuk Menggunakan Pasangan sebagai Kunci dalam Peta Tidak Tertib dalam C?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-09 07:17:07719semak imbas

How to Use Pairs as Keys in Unordered Maps in C  ?

Menggunakan Pasangan sebagai Kekunci dalam Peta Tidak Tersusun

Apabila cuba mengisytiharkan unordered_map di mana kunci adalah pasangan (Undi = pasangan

Implicit instantiation of undefined template 'std::__1::hash, std::__1::basic_string > >'</p>
<p>Ini ralat timbul kerana unordered_map bergantung pada fungsi cincang yang disesuaikan dengan jenis kuncinya. Memandangkan fungsi cincang lalai tidak boleh digunakan untuk berpasangan, anda mesti menyediakan fungsi cincang tersuai.</p>
<p>Sebagai contoh, pertimbangkan fungsi cincang tersuai berikut (pair_hash):</p>
<pre class="brush:php;toolbar:false">struct pair_hash {
    template <class T1, class T2>
    std::size_t operator() (const std::pair<T1, T2> &amp;p) const {
        auto h1 = std::hash<T1>{}(p.first);
        auto h2 = std::hash<T2>{}(p.second);
        return h1 ^ h2;
    }
};

Fungsi cincang ini menggabungkan nilai cincang komponen pasangan menggunakan operator XOR. Untuk menggunakannya, ubah suai perisytiharan unordered_map seperti berikut:

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

Pendekatan ini membenarkan penciptaan peta tidak tertib dengan pasangan sebagai kunci dengan menyediakan fungsi cincang yang sesuai. Walau bagaimanapun, perlu diingat bahawa pelaksanaan ringkas ini mungkin tidak mempamerkan sifat cincang yang optimum dan pertimbangkan untuk meneroka fungsi hash_combine Boost atau set hash_value untuk hasil yang dipertingkatkan.

Atas ialah kandungan terperinci Bagaimana untuk Menggunakan Pasangan sebagai Kunci dalam Peta Tidak Tertib dalam C?. 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