Существует ли двунаправленная структура данных карты в Matlab, которая более эффективна, чем использование ключей и значений container.Map в противоположном направлении? И как наиболее эффективно использовать обычные карты для этой цели?
Есть ли двунаправленная карта в Matlab?
Ответы (1)
Класс containers.Map
изначально не поддерживает двунаправленное сопоставление (начиная с R2014b). Поддерживаемые методы перечислены в doc containers.Map
:
isKey
: определить, содержит ли объектcontainers.Map
ключkeys
: Определить ключи объектаcontainers.Map
length
: Длина объектаcontainers.Map
remove
: удалить пары "ключ-значение" из объектаcontainers.Map
.size
: Размер объектаcontainers.Map
values
: определить значения в объектеcontainers.Map
Вы можете реализовать эту функциональность самостоятельно, создав
inverse = containers.Map(original.values, original.keys)
Или используйте Map2, предоставленный Микко Леппянен на файловом обмене:
[...] Также поддерживается двунаправленное использование пар ключ-значение (например, библиотека Boost.Bimap).
Если ваши пары ключ-значение являются положительными целыми числами и вы редко меняете карту, вы можете использовать sparse
, что должно быть весьма эффективным.
map = sparse(keys, 1, values);
inverseMap = sparse(nonzeros(map), 1, find(map))
person
knedlsepp
schedule
01.03.2015
Означает ли это, что нет встроенной реализации?
- person Dandelion; 01.03.2015
@Vasei: Нет, встроенной двунаправленной карты нет. Я добавил дополнительную информацию.
- person knedlsepp; 01.03.2015
sparse
. - person knedlsepp   schedule 01.03.2015