Są dwa główne sposoby:
- możesz przekazać do szablonu własną funkcję hashującą (w ten sposób możesz przeciążyć domyślne zachowanie dla typów takich jak int)
- zdefiniować domyślny hasher dla własnego typu, dzięki czemu std::unordered_map będzie go używał automatycznie (bez konieczności podawania go w argumentach szablonu).
#include <unordered_map>
struct Struktura{
int jakies_dane;
};
struct MyHash {
std::size_t operator()(const int& k) const {
return 123;
}
};
namespace std {
template<>
struct hash<Struktura> {
std::size_t operator()(const Struktura& k) const {
return 123;
}
};
}
void f(){
std::unordered_map<int, int> a; // po prostu
std::unordered_map<int, int, MyHash> b; // custom hash
std::unordered_map<Struktura, int> c; // hash dla Struktura uzyty automatycznie
}