2015-03-01 6 views
3

Есть ли двунаправленная структура данных карты в Matlab, которая более эффективна, чем использование контейнеров. Клавиши и значения карты в противоположном направлении? Также каков наиболее эффективный способ использования обычных карт для этой цели?Есть двунаправленная карта в Matlab?

+0

Какие данные вы хотите сохранить? – knedlsepp

+0

Сопоставление целых чисел – Dandelion

+1

Пожалуйста, добавьте примерные данные к вашему вопросу. Также расскажите, как часто вы собираетесь вставлять новые данные или удалять данные на свою двунаправленную карту. Различные решения будут демонстрировать разную эффективность для разных случаев использования. Для положительных целых чисел вы можете попробовать ['разреженный'] (http://www.mathworks.com/help/matlab/ref/sparse.html). – knedlsepp

ответ

4

Класс 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 -класса предоставленный Mikko Leppänen o п Обмен файла:

[...] Кроме того, двунаправленная использование пар ключ-значение поддерживается (например, библиотеки Boost.Bimap).


Если пар ключ-значение являются положительными целыми числами, и вы редко изменить карту, вы можете использовать sparse, который должен быть достаточно эффективным.

map = sparse(keys, 1, values); 
inverseMap = sparse(nonzeros(map), 1, find(map)) 
+0

Означает ли это, что нет встроенной реализации? – Dandelion

+0

@ Vasei: Нет, нет встроенной двунаправленной карты. Я добавил дополнительную информацию. – knedlsepp