Привет, У меня был unordered_set для хранения моего 16 массива int, теперь мне нужно сохранить еще один int в качестве своего ведра. Интересно, могу ли я вставить массив в мой unordered_set, или я могу использовать тот же шаблон, который я использовал?C++ Как вставить массив в unordered_map в качестве ключа?
#include <unordered_set>
#include <array>
namespace std
{
template<typename T, size_t N>
struct hash<array<T, N> >
{
typedef array<T, N> argument_type;
typedef size_t result_type;
result_type operator()(const argument_type& a) const
{
hash<T> hasher;
result_type h = 0;
for (result_type i = 0; i < N; ++i)
{
h = h * 31 + hasher(a[i]);
}
return h;
}
};
}
std::unordered_set<std::array<int, 16> > closelist;
int main()
{
std::array<int, 16> sn = {1,2,3,4,5,6,0,8,9,10,11,12,13,14,7,15};
closelist.insert(sn);
}
Могу я просто изменить его на это?
std::unordered_map<std::array<int, 16>,int > closelist;
int main()
{
std::array<int, 16> sn = {1,2,3,4,5,6,0,8,9,10,11,12,13,14,7,15};
closelist.insert(sn,24);
}
И я не мог понять шаблон, интересно, что такое "Н = Н * 31 + мясорубка (а [я]);"?
спасибо !!!
_ «Интересно, что такое' h = h * 31 + hasher (a [i]); '' _ - В этой строке вы просто вычисляете хэш для своего массива. Что именно вы не понимаете? – soon
@soon что такое 31? Я спросил об этом, и какой-то хороший парень дал мне этот шаблон ... – weeo
'31' - это просто константа. Это зависит от ваших ограничений для элементов в массиве. – soon