2016-03-23 5 views
2

Ich habe ein ordered_map und eingesetzt, um die folgenden ElementeSchlüssel mit unterschiedlichem Hash-Code in demselben Bucket. C++

Wenn ich die Eimer überprüft, fand ich, dass es 7 Eimern.

Das ist, was ich gelesen habe:
Die Elemente eines unordered assoziative Container sind in Buckets organisiert. Schlüssel mit demselben Hash-Code erscheinen im gleichen Bucket

Aber als ich den Hash-Code der Schlüssel gedruckt habe, habe ich festgestellt, dass Elemente in einem Bucket mit verschiedenen Hash-Codes vorhanden sind.

Könnte jemand bitte sagen, wenn ich etwas vermisse und warum Elemente mit verschiedenen Hash-Codes und in demselben Eimer vorhanden.

Ergebnisse:

mymap has 7 buckets. 
mymap size 6 keys. 
bucket #0 contains: 
[book:livre] KEY HASH VALUE: 4190142187 
[house:maison] KEY HASH VALUE: 4227651036 

bucket #1 contains: 

bucket #2 contains: 

bucket #3 contains: 
[grapefruit:pamplemousse] KEY HASH VALUE: 3375607049 
[tree:arbre] KEY HASH VALUE: 335777326 

bucket #4 contains: 

bucket #5 contains: 
[apple:pomme] KEY HASH VALUE: 2758877147 

bucket #6 contains: 
[door:porte] KEY HASH VALUE: 3658195372 

Dank

+0

* "Keys mit dem gleichen Hash-Code erscheinen im selben Bucket" * '! =' Keys mit *** verschiedenen *** Hash-Codes erscheinen in *** verschiedenen *** Buckets. –

Antwort

1

Das ist normal. Wenn Sie einen 32-Bit-Hash-Code haben, wollen Sie nicht 2^32 Buckets. Stattdessen wird der Hash-Code dem Index eines Buckets zugeordnet. Wenn Sie beispielsweise 7 Buckets haben, könnte ein Element Bucket # (Hash% 7) verwenden. Die Objekte mit den Hash-Codes 0, 7, 14, 21, ... und so weiter erscheinen alle in demselben Bucket.

Verwandte Themen