Salve, avevo un set non ordinato per contenere il mio array int 16, ora ho bisogno di memorizzare un altro int come bucket. Mi chiedo se posso inserire l'array nel mio unordered_set, o posso usare lo stesso modello che usavo?C++ Come inserire la matrice in unordered_map come chiave?
#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);
}
Posso solo cambiarlo a questo?
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);
}
E non riuscivo a capire il modello, mi chiedo che cosa è "H = h * 31 + Hasher (a [i]);"?
Grazie !!!
_ "Mi chiedo cosa sia' h = h * 31 + hasher (a [i]); '" _ - In questa riga si calcola solo un hash per il proprio array. Che cosa esattamente non capisci? – soon
@soon cosa è 31? Ho chiesto informazioni su questo e qualche bravo ragazzo mi ha dato questo modello ... – weeo
'31' è solo una costante. Dipende dalle tue restrizioni per gli elementi in un array. – soon