I just want to use a unordered_map with my struct as key, since I dont need any ordering..but I just cant find myself with all that hash stuff..
As a side relevant question..When ppl compare unordered and ordered map they never talk about the hash function, how can that be? Cant a bad hash function makes unordered map slower than map? (solely due the hash function)
struct exemple{
unsigned char a,b,c;
unsigned int n;
bool operator == ( const exemple & other) const {..}
};
namespace std {
template <>
struct hash<exemple> : public std::unary_function<const exemple &, std::size_t>
{
inline std::size_t operator()(const exemple & exemple_p ) const
{
return 0;// what do I do
}
};
}
-edit- a,b,c can have only the values 'a', 'b', 'c' or 'd', and n varies ~ 3 to 60.
What you do in your hash function depends on the values you got, not necessarily so much on their types. If all four data members contain each value evenly distributed, I would combine the two characters into an unsigned long
and return the result of xoring the two values:
typedef unsigned long ulong;
return n ^ (ulong(a << 16) | ulong(b << 8) | ulong(c));
It is certainly a hash function. Whether it is one which works well is a different question. You might also combine the result with std::hash<unsigned long>
.