matlab中有双向映射吗?

Is there a bidirectional map in matlab?

在matlab中有没有比在相反方向使用containers.Map的键和值更高效的双向地图数据结构?另外,为此目的使用普通地图的最有效方法是什么?

containers.Map class 本身不支持双向映射(从 R2014b 开始)。支持的方法列于doc containers.Map:

  • isKey:判断containers.Map对象是否包含key
  • keys:识别containers.Map对象的键
  • length: containers.Map 对象的长度
  • remove:从containers.Map对象
  • 中删除键值对
  • size: containers.Map 对象的大小
  • values:识别 containers.Map 对象中的值

您可以自己实现此功能,方法是构建

inverse = containers.Map(original.values, original.keys)

或者使用Map2-class提供的 Mikko Leppänen 在文件交换中:

[...] Also a bidirectional use of key-value pairs is supported (like Boost.Bimap library).


如果你的键值对是正整数,而且你很少改变地图,你可以使用sparse,这应该是非常有效的。

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