Selanjutnya, kami menggunakan N4140 (Standar C ++ 14).
Menurut § 17.6.3.4 Persyaratan hash ,
Nilai yang dikembalikan hanya akan bergantung pada argumen
k
selama durasi program .[Catatan: Demikian semua evaluasi ekspresi
h(k)
dengan nilai yang sama untukk
menghasilkan hasil yang sama untuk eksekusi program yang diberikan . - catatan akhir]
dan § 20.9.12 Kelas Template hash mengatakan
...
Instansiasi
hash<Key>
akan:(1.1) - memenuhi persyaratan Hash (17.6.3.4) ...
(1.2) - ...
Ini berarti nilai hash value
(yaitu hash<decltype(value)>(value)
) dapat mengambil nilai yang berbeda jika Anda me-restart program.
Tapi kenapa? Batasan ini bukan dalam Standar C ++ 11, tetapi dalam Standar C ++ 14, C ++ 17 dan C ++ 20. Sebagai pengguna (bukan pengembang STL), akan sangat berguna jika std::hash
bersifat deterministik. Apakah ada kesulitan matematika dalam mengimplementasikan fungsi hash deterministik? Tetapi fungsi hash yang kita gunakan sehari-hari (mis. Usang md5sum
atau lebih aman sha256
) semuanya deterministik. Apakah ada masalah efisiensi?