Я недавно написал этого универсального помощника для хэширования массива NxM T.
template <class T, size_t N, size_t M>
size_t hash(const T (&aa)[N][M])
{
size_t seed = 0;
for (size_t i=0; i<N; i++)
boost::hash_combine(seed, boost::hash_range(aa[i], aa[i]+M));
return seed;
}
Вы можете использовать тот же самый гист, чтобы перебрать произвольные массивы
template <class T, size_t N, size_t M, class F>
void for_each(const T (&aa)[N][M], F func)
{
size_t seed = 0;
for (size_t i=0; i<N; i++)
for (size_t j=0; j<M; j++)
func(aa[i][j]);
}
template <class T, size_t N, size_t M, size_t L, class F>
void for_each(const T (&aaa)[N][M][L], F func)
{
size_t seed = 0;
for (size_t i=0; i<N; i++)
for (size_t j=0; j<M; j++)
for (size_t k=0; k<L; k++)
func(aa[i][j][k]);
}
Используйте его вот так:
void display(float f) { std::cout << f << std::endl; }
// ...
float fff[1][2][3];
for_each(fff, display);