map is simply a loop construct, like foreach(), while() or even grep(). If you have a composite type (like hash or array) you need a loop to get at all values. If you have a composite type inside another composite type (for example a HashofArrays) you obviously need a loop inside a loop aka nested loops. For even higher dimensions you need the corresponding number of nested loop constructs. Right?
Now you have a HashOfArrays, a composite type of dimension 2, so you need a nested loop. If you want to use map (instead of foreach) then you need a nested map, i.e. a map inside a map. The outer map is for the hash, the inner map is for the array.