Hi, I used unordered_set to store my 16 int array, now I need to save another int as my bucket. I wonder if I can insert an array into my unordered_set or use the same template that I used?
#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); }
Can I just change it to this?
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); }
And I could not understand the template, I wonder what is "h = h * 31 + hasher (a [i]);"?
Thanks!!!