在Matlab中是否有双向映射?

3

Matlab中是否有比在容器中使用keys和values的相反方向更有效的双向映射数据结构?此外,最有效的使用普通映射来实现此目的的方法是什么?


你想要存储什么样的数据? - knedlsepp
整数之间的映射 - Dandelion
1
请向您的问题添加示例数据。并告诉我们您将多频繁地插入新数据或从双向映射中删除数据。不同的解决方案对不同的用例会展现出不同的效率。对于正整数,您可以尝试使用sparse - knedlsepp
这是一个普遍的问题,双向映射是众所周知的结构。 - Dandelion
如果你想要最通用的解决方案,那么你可能得不到最适合你使用情况的高效解决方案。 - knedlsepp
1个回答

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)

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

[...] 这个类也支持键值对的双向使用(如Boost.Bimap库)。


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

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

这是否意味着没有内置实现? - Dandelion
@Vasei:不,没有内置的双向映射。我添加了额外的信息。 - knedlsepp

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接