容器映射和matlab中的结构之间的区别

Yuv*_*mon 9 matlab dictionary

我想了解容器映射和matlab中的结构之间的区别.

从我看来,似乎容器映射的优点是它可以使用任何数字或字符串作为键,而struct字段只能采用合法变量名称的字符串(例如它不接受mystruct.('123string'))

在结构上使用容器映射还有其他优点吗?

谢谢

hba*_*rts 9

容器映射和结构体背后的概念是完全不同的:

容器映射用于创建映射或索引.例如,如果您有一个矩阵A并希望索引第二行和第二列中的元素,则将使用它对其进行索引A(2,2).对于数字,矩阵等,您希望索引特定行号,这很方便.但是,假设您有Mathworks的以下示例所示的情况:

例

这里有一个值数组,您可以value(1)为1月编制索引,依此类推.然而,这不是很清晰.如果你可以索引它会更方便value('Jan').这正是容器地图提供的内容.正如@marsei在评论中所说,容器映射是一种基于Java的无序构造,它使用散列表进行索引.

结构是一个不同的结构,它是基于C的并且是有序的(感谢未成年的@marsei).struct的主要用途是帮助您以更合理的方式存储数据.例如,使用图像时,通常有两个变量:一个用于图像数据,另一个用于颜色图.如果没有结构,则需要在工作区中保留这两个单独的变量.对于多个图像这变得非常混乱(例如,使用的名称,如img0_data,img0_map等).结构可以帮助您以一种简单的方式组织它:img0使用字段data和调用的结构map.

在字典的上下文中,两种结构或多或少都是等价的,尽管结构通常看起来比容器映射更快.另外,正如问题中已经提到的,key容器映射可以是任何单个值,而对于结构,它必须是字符串.

  • 我很高兴得到一些选民的反馈,所以我可以改进答案. (3认同)
  • Matlab结构是名称 - 值对的有序列表,并且是基于C的.映射容器是基于Java的,基本上是相同的(但是无序).两者都使用哈希表来访问它们的值,并且两者都可以使用"fieldname"来访问数据:`s.field1`和`cm('key1')`.结构使用起来更快.(*我没有投票*). (3认同)
  • 是的,map 绝对是一个字典,一个 x --> y 的映射,对 x 和 y 没有任何限制。结构体是一种数据结构,是一种以逻辑方式保存数据的方式。例如,您可以创建一个结构数组(例如`person(1).age`),但您不能创建一个映射数组(据我所知)。这类似于 C/C++ 结构:您定义如何保存数据,然后定义该结构的实例对象来保存数据。 (2认同)

小智 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之前.

  • “struct,它出现在 R2006a 之前。” 这就是文档所说的,因为文档自 2006 年以来一直在跟踪新功能。当我在 1998 年左右开始使用 MATLAB 时,Structs 已经存在了一段时间。但是动态索引直到后来才出现(我不记得具体是什么时候,可能是在7.0版本中)。 (2认同)