2013-08-16 12 views
8

Hash tablosunun (unordered_map veya unordered_set gibi sırasız kaplar) neden minimum yük faktörünü sorgulamak veya ayarlamak için bir arabirim sağlamadığını anlamaya çalışıyordum.Sırasız kaplar neden minimum yük faktörünü tanımlamak için bir arabirim sağlıyor?

Say c ı ayarı için

ve

c.max_load_factor(val) 

sorgulamak için

c.max_load_factor() 

kullanabilirsiniz bir unordered_set olduğunu.

Neden C++ 11, min_load_factor sorgulamak için bir arabirim sağlamaz? Açıklanacak uygulama detayları var mı?

Ayrıca Josuttis göre C++ STL, bahseder:

kap ruh doktoru eleman sayısı etkilenemez zaman rehashing zorlamak için kullanılır minimum yük faktörü.

+3

Bir tahminde, elemanların hafızayı tahsis etmeleri gerekmediği ve başarısız olamayacağı (belki de bir yıkıcı fırlatmadığı sürece, bu durumda kabı değil, eleman tipini suçluyorsunuz). Bunun gerçek sebebi olup olmadığını bilmiyorum, ancak daha güçlü bir tane daha olabilir. –

+2

@SteveJessop: Bir dizi başka kapsayıcıyla tutarlı olduğunu söyleyebilirim: "vektör" veya "deque" otomatik olarak küçülmez. –

+2

Minimum yük faktörü ne anlama gelir? Yeniden boyutlarından önce ne kadar küçük olsun? – andre

cevap

1

unordered_map üzerindeki yük faktörü, karma tablosundaki çarpışma olasılığını etkiler. Örneğin, iki öğenin aynı kovada yer alma olasılığı. Kap, max_load_factor değerini, kova sayısındaki bir artışı zorlayan ve dolayısıyla bir rehaşa neden olan eşik değerini kullanır.

Kullanıcı tarafından denetlenen minimum yük faktörü gibi bir şey yoktur, çünkü kapsayıcıda bulunan öğelerin sayısına saygı göstermelidir.

+0

Buna katılıyorum. Senin değinmek istediğin noktayı anlıyorum. –

İlgili konular