Ich habe nicht den C++ - Standard gelesen, aber das ist, wie ich finde, dass die unordered_map von C++ funktionieren soll.C++ unordered_map Kollision Behandlung, Größe ändern und rehash
- Weisen Sie einen Speicherblock im Heap zu.
- Mit jeder PUT-Anfrage, das Objekt Hash und es zu einem Raum Karte Adressierung in diesem Speicher
- Während dieses Prozess Griff Kollision Handhabung über Verkettungs oder öffnen ..
Ich bin ziemlich überrascht, dass ich kann nicht finde viel darüber heraus, wie der Speicher von unsordered_map gehandhabt wird. Gibt es eine bestimmte anfängliche Speichergröße, die unordered_map zuweist? Was passiert, wenn wir sagen, dass wir 50 Int-Speicher zugewiesen haben und wir schließlich 5000 Integer eingefügt haben?
Dies wird viele Kollisionen sein, so glaube ich, sollte es wie ein Re-Hashing und Größenanpassung Algorithmus sein, um die Anzahl der Kollisionen nach einem bestimmten Grad der Kollisionsschwelle zu verringern. Da sie der Klasse explizit als Memberfunktionen zur Verfügung gestellt werden, nehme ich an, dass sie auch intern verwendet werden. Gibt es einen solchen Mechanismus?
Der standardmäßige maximale Lastfaktor ist tatsächlich "1,0", und der tatsächliche Lastfaktor schwankt im Allgemeinen zwischen ~ 0,5 und 1,0, wenn die Tabelle die Größe ändert und dann wieder wächst. Und ja - eine lineare Suche erfolgt durch kollidierende Elemente. –
Danke, Tony D. Aktualisiert. – kevr