Thanks to Sindar for the suggestion of using tables. I have since become aware of an alternative way to do this, which I think is worth showing as a seperate answer for reference.
This way allows to omit completely any temporary struct variables (as does Sindar's method), but I think is a litlte easier to think how the data is organised:
keys = {'Jan','Feb','Mar'};
data_map = containers.Map('KeyType','char','ValueType','any');
% loop over keys and put some data in the map
for k = 1:length(keys)
% Define some dummy variables
prices = rand(1,6); % a numeric array variable type
description = 'HIGH'; % a character array variable type
% Associate a structure with each key, with variables attached to the various fields
data_map(keys{k}) = struct('prices',prices,...
'description',description);
end
% Add a new field, temperature, to the struct object associated with the key 'Feb'
temperature = rand(1,2);
data_map('Feb') = setfield(data_map('Feb'),'temperature',temperature);
This yields the following for the 'Feb' key for example:
data_map('Feb')
% struct with fields:
% prices: [0.9237 0.6537 0.9326 0.1635 0.9211 0.7947]
% description: 'HIGH'
% temperature: [0.7673 0.6712]
And allows me to nicely access the data with the simple commands:
data_map('Feb').prices
data_map('Feb').description
data_map('Feb').temperature