2013-08-16 8 views
8

Stavo cercando di capire perché la tabella hash (contenitori non ordinati come unordered_map o unordered_set) non fornisce un'interfaccia per l'interrogazione o l'impostazione del fattore di carico minimo.Perché i contenitori non ordinati forniscono un'interfaccia per la definizione del fattore di carico minimo?

Say c è un unordered_set, posso usare

c.max_load_factor() 

per l'interrogazione

e

c.max_load_factor(val) 

per l'impostazione.

Perché C++ 11 non fornisce un'interfaccia per l'interrogazione di min_load_factor? Ci sono dettagli di implementazione, che spiegherebbero?

Inoltre, C++ STL da Josuttis, menziona che:

Il fattore di carico minimo, che viene utilizzato per forzare rehashing quando il numero di elementi nei restringe contenitore non può essere influenzata.

+3

Ad una ipotesi è così che la rimozione di elementi non deve allocare memoria e non può fallire (forse a meno che un distruttore non getti, nel qual caso si incolpa del tipo di elemento piuttosto che del contenitore). Non so se questa sia la vera ragione, però potrebbe essercene un'altra più forte. –

+2

@SteveJessop: Direi che è coerente con un numero di altri contenitori: né 'vector' né' deque' si restringono automaticamente. –

+2

Cosa significa un fattore di carico minimo? Quanto è piccolo prima delle sue ridimensionazioni? – andre

risposta

1

Il fattore di carico su un unordered_map influisce sulla probabilità di collisione nella tabella hash. Ad esempio, la probabilità che due elementi si trovino nello stesso bucket. Il contenitore utilizza il valore di max_load_factor come soglia che impone un aumento del numero di bucket e pertanto provoca un rehash.

Non esiste un fattore di carico minimo controllabile dall'utente poiché deve rispettare il numero di elementi già presenti nel contenitore.

+0

Sono d'accordo con questo. Vedo il tuo punto. –

Problemi correlati