If all you need for the hash is uint64_t of any possible value with unknown probabilities, and your output should be uint64_t, then you will not get any benefits by changing the value. Just use the key itself.
If you knew something about the distribution of your values, or your values were limited to a smaller range (which is actually the same as knowledge about the distribution), then it would be useful to apply the transformation to the key, but it depends on the implementation of the container. You would benefit from reduced collisions when the table converts the hash to the bucket index, but this depends on both the algorithm of the table and the current / average state of the table (how often each bucket is used).
source
share