Peter Dimov wrote:
Boris Mansencal wrote:
I would like to use TR1 unordered_map for a 2D point custom data type. For this, I use hash_value from Boost. But I would like to give/pass a context to this function : here, width & height of domain in which are my 2D points. Currently, I declare theses width and height static. My code (in my cpp file) looks like :
static int P_width; static int P_height; std::size_t hash_value(point const& p) { return ((size_t)p.x()<<1)*P_width + (size_t)(p.y()<<1); }
But this solution is not satisfactory as I can not have several instances of my class including the unordered_map, i.e., several domains of different width & height.
Is there a straightforward solution that I have overlooked ?
Is the context-free solution
std::size_t hash_value(point const& p) { std::size_t seed( 0 );
hash_combine( seed, p.x() ); hash_combine( seed, p.y() );
return seed; }
not working for you?
It is working... but my tests show better performances when I use my hash function (using width & height) instead of this hash_combine solution. Is there no solution to my question ? (I am not a hash function specialist, so if you have a better hash function, for 2D points in width*height domain, context free or not, I would be happy to know...) Boris.