Я пытаюсь использовать unordered_set для поддержки уникального списка структур. Я определил хеш-функцию для структуры Name, однако я получаю ошибки компиляции, когда расширяю структуру Name, чтобы она содержала другой член структуры, Address. Я знаю, что мне нужно указать, как хешируется структура Address, но я не могу понять, где и как.
#include <unordered_set>
#include <string>
using namespace std;
struct Address
{
int num;
};
struct Name
{
string first;
string second;
Address address;
};
struct hashing_fn {
size_t operator()(const Address &a ) const
{
return hash<int>()(a.num);
}
size_t operator()(const Name &name ) const
{
return hash<string>()(name.first) ^ hash<string>()(name.second) ^ hash<Address>()(name.address);
}
};
int main(int argc, char* argv[])
{
unordered_set<Name,hashing_fn> ids;
return 0;
}
Обновление
Только для завершения, это было исправлением:
template<>
struct hash<typename Address> {
size_t operator()(const Address &a ) const
{
return hash<int>()(a.num);
}
};