Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Memanjangkan Fungsi Hash Standard untuk Jenis Tersuai dalam Bekas Tidak Tertib C?
Untuk menggunakan jenis yang ditentukan pengguna sebagai kunci dalam bekas yang tidak tersusun seperti std::unordered_set dan std:: unordered_map, adalah perlu untuk melaksanakan pengendali kesamaan (operator==) dan functor hash. Pendekatan yang lebih mudah ialah dengan mencipta fungsi cincang lalai khusus untuk jenis tersuai, sama dengan fungsi cincang terbina dalam yang disediakan untuk jenis standard.
Setelah meneliti pelbagai sumber, nampaknya pengkhususan std::hash< ;X>::operator() untuk jenis X yang ditentukan pengguna sememangnya boleh dilaksanakan. Walau bagaimanapun, soalan berikut timbul:
Piawaian C secara eksplisit membenarkan dan menggalakkan penambahan pengkhususan pada ruang nama std, dengan syarat salah satu jenis yang terlibat adalah ditentukan pengguna. Oleh itu, soalan pertama boleh dijawab secara afirmatif.
Kaedah yang betul dan pilihan untuk mengkhususkan fungsi cincang dalam C 11 adalah untuk mentakrifkan struktur dalam ruang nama std seperti berikut :
namespace std { template <> struct hash<Foo> { size_t operator()(const Foo & x) const { // Implementation of the hash function for type Foo } }; }
Sintaks ini memastikan pematuhan dengan standard C 11 dan membolehkan spesifikasi fungsi cincang tersuai untuk jenis yang ditentukan pengguna.
Malangnya, tiada kaedah bebas platform untuk mengkhususkan std::hash
Atas ialah kandungan terperinci Bagaimana untuk Memanjangkan Fungsi Hash Standard untuk Jenis Tersuai dalam Bekas Tidak Tertib C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!