Допустим, у меня есть два следующих массива:
keys = uint32([1:100])';
values = uint32([100:-1:1])';
Я могу определить контейнер карты следующим образом:
newMap = containers.Map(keys,values);
newMap =
containers.Map handle
Package: containers
Properties:
Count: 100
KeyType: 'uint32'
ValueType: 'uint32'
Methods, Events, Superclasses
Тип одинаков для ключей и значений, uint32
.
Однако, если я хочу использовать контейнер для сопоставления нового массива:
other_keys = uint32([5 9 10]);
Я прочитал в документации, я должен сначала преобразовать other_keys
в массив ячеек:
>> newMap(other_keys)
Error using containers.Map/subsref
Specified key type does not match the type expected
for this container.
или:
values(newMap, other_keys);
Error using subsindex
Function 'subsindex' is not defined for values of
class 'containers.Map'.
Единственный способ заставить его работать с:
values(newMap, num2cell(other_keys));
, который может занять длительное время и много памяти !Например, если у меня 100 миллионов номеров, я получаю:
tic
my_uint32_array = uint32(1:100000000)
my_cell_array = num2cell(my_uint32_array);
toc
Elapsed time is 27.956496 seconds.
, где:
my_uint32_array
имеет размер 381.5 MB
my_cell array
имеет размер 10.8GB
( 100x раз больше!, хотя это всего лишь временная переменная, поскольку я всего лишь заинтересован в отображении моих значений в конце концов)
Учитывая, что я могу создавать Сопоставлять контейнеры без необходимости сначала преобразовывать их в массивы ячеек, есть ли способ использовать их без необходимости сначала преобразовывать мои ключи в массивы ячеек?