我想了解容器映射和matlab中的结构之间的区别.
从我看来,似乎容器映射的优点是它可以使用任何数字或字符串作为键,而struct字段只能采用合法变量名称的字符串(例如它不接受mystruct.('123string'))
在结构上使用容器映射还有其他优点吗?
谢谢
容器映射和结构体背后的概念是完全不同的:
容器映射用于创建映射或索引.例如,如果您有一个矩阵A并希望索引第二行和第二列中的元素,则将使用它对其进行索引A(2,2).对于数字,矩阵等,您希望索引特定行号,这很方便.但是,假设您有Mathworks的以下示例所示的情况:
这里有一个值数组,您可以value(1)为1月编制索引,依此类推.然而,这不是很清晰.如果你可以索引它会更方便value('Jan').这正是容器地图提供的内容.正如@marsei在评论中所说,容器映射是一种基于Java的无序构造,它使用散列表进行索引.
结构是一个不同的结构,它是基于C的并且是有序的(感谢未成年的@marsei).struct的主要用途是帮助您以更合理的方式存储数据.例如,使用图像时,通常有两个变量:一个用于图像数据,另一个用于颜色图.如果没有结构,则需要在工作区中保留这两个单独的变量.对于多个图像这变得非常混乱(例如,使用的名称,如img0_data,img0_map等).结构可以帮助您以一种简单的方式组织它:img0使用字段data和调用的结构map.
在字典的上下文中,两种结构或多或少都是等价的,尽管结构通常看起来比容器映射更快.另外,正如问题中已经提到的,key容器映射可以是任何单个值,而对于结构,它必须是字符串.
小智 8
功能明智,containers.Map几乎是一个概括struct,即:
containers.Map不限于有效的标识符字符串.containers.Map可以强制执行值检查.一个值得注意的区别是,实例containers.Map通过引用传递,而struct对象通过值传递.
设计明智,containers.Map介绍填补空白java.util.Map(请参阅在Matlab中使用Java集合).这以某种方式解释了不同的传递约定,因为Java的所有实例Object都是通过Matlab中的引用传递的(请参阅将数据传递给Java方法).
历史明智,containers.Map来自R2008b,即之后struct,在R2006a之前.