Bundan böyle N4140 (C ++ 14 Standard) kullanacağız .
Göre 17.6.3.4 Hash gereksinimlerini § ,
Döndürülen değer yalnızca tartışmaya bağlı olacaktır
k
programın süresine ilişkin .[Not: Böylece
h(k)
aynı değer için ifadenin tüm değerlendirmelerik
aynı sonucu verir , programın belirli bir yürütülmesi için verir . - son not]
ve § 20.9.12 Sınıf şablonu karması diyor
...
örnekleme
hash<Key>
:(1.1) - Karma gereksinimlerini karşılar (17.6.3.4) ...
(1.2) - ...
Bu, value
(yanihash<decltype(value)>(value)
, programı yeniden ) farklı bir değer alabileceği .
Ama neden? Bu sınırlama C ++ 11 standardında değil, C ++ 14, C ++ 17 ve C ++ 20 standardındaydı. Bir kullanıcı olarak (STL geliştiricisi değil), std::hash
deterministik olsaydı oldukça yararlı olurdu . Deterministik bir hash fonksiyonunun uygulanmasında herhangi bir matematiksel zorluk var mı? Ancak günlük kullandığımız hash işlevlerinin (örneğin kullanımdan kaldırılmış md5sum
veya daha güvenli sha256
) hepsi belirleyicidir. Verimlilik sorunu var mı?