Boost sihir numarası: hash_combine
boost::hash_combine
şablon işlevi, karma (seed
) denilen ve bir nesne v
için bir referans alır. docs göre v
karma seed
birleştirir
seed ^= hash_value(v) 0x9e3779b9 (seed << 6) (seed >> 2);
Bu deterministik olduğunu görüyorum. Bir XOR kullanılır neden görüyorum.
Buna ek olarak benzer değerleri eşleme yaygın olarak birbirinden çok karışık tablolar bozulmayacağını, ama birisi sihirli sabiti nedir açıklayabilir misiniz? sondalama yardımcı olur eminim
CEVAP
Sihirli sayı her 0 veya 1, bit arasında basit bir ilişki ile eşit derecede olası olduğu 32 rasgele bit olması gerekiyor. Bu bit bir dize bulmak için ortak bir yol irrasyonel bir sayı ikili genişleme kullanmaktır; bu durumda, bu sayı altın oran karşılıklı
phi = (1 sqrt(5)) / 2
2^32 / phi = 0x9e3779b9
Yani bu sayı "rastgele" tohum her değiştirir; sizin de dediğiniz gibi, bu ardışık değerleri birbirlerinden uzak olacağı anlamına gelir. Eski tohum kaymıştır sürümleri de dahil olmak üzere, eğer hash_value()
değerleri oldukça küçük bir aralık varsa bile, farklılıklar yakında tüm bitlerin yayılmış olmasını sağlar.
Nasıl CMakeLists.txt içinde boost kütü...
Nasıl benim Subversion bulmak için ser...
ruh semantik eylem boost parametreleri...
HTML5: sadece tamsayı alır giriş tipi ...
Numarası.() işareti javascript...