
On 26 January 2012 07:51, Andrey Semashev <andrey.semashev@gmail.com> wrote:
I think, the problem of insufficient quality of a hash function should not be solved by the container itself. Those users who provide good hash functions will just waste CPU cycles if additional hash values mixing is done within the container.
That's really an issue for the standard (a cop out I know, but I don't want to get into this debate).
IMHO, the best way to address this problem is to provide a set of "good" hash functions for common types (I believe functional/hash already does this) and possibly a wrapper function that just does bit mixing in a user-provided hash function. Boost.Unordered docs should mention these tools and advise to use them to get better performance.
Actually functional/hash doesn't. It's good enough for the standard, but no better. For numbers that fit into the hash value, it just returns them unchanged which is fine for a prime number of buckets but not for power of 2 containers.