Witam Byłem kiedyś unordered_set do przechowywania mojej 16 tablicy int, teraz muszę przechowywać jeszcze jeden int jako jego wiadro. Zastanawiam się, czy mogę wstawić tablicę do mojego unordered_set, czy mogę użyć tego samego szablonu, którego używałem?C++ Jak wstawić tablicę do unordered_map jako jej klucz?
#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);
}
Czy mogę po prostu to zmienić?
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);
}
I nie mogłem zrozumieć szablonu, zastanawiam się, co to jest "h = h * 31 + hasher (a [i]);"?
Dziękujemy!
_ "Zastanawiam się, co to jest' h = h * 31 + hasher (a [i]); "" - W tej linii po prostu obliczyć hash dla swojej tablicy. Czego dokładnie nie rozumiesz? – soon
@soon co to jest 31? Zapytałem o to i jakiś miły facet dał mi ten szablon ... – weeo
'31' jest po prostu stałą. To zależy od ograniczeń dotyczących elementów w tablicy. – soon