std :: map - 插入一个嵌套结构的主体

时间:2011-04-22 19:29:12

标签: c++ insert nested structure stdmap

以下insert是否有效?我的问题的原因是身体中有另一个结构,其中还有另一个结构(数组)。所有变量abcxyz都是次要的,只是支持我的问题。

提前致谢。

struct S_A
{
    int a;
    float b;
    char c;
    // ...
    S_B my_double_nested_structure;
};

struct S_B
{
    int x;
    float y;
    char z;
    // .. .
    char array1[2];
};

typedef std::map<int, S_A> myAMapType;

S_A nestedStruct;
nestedStruct.a = 5;
nestedStruct.b = 5.9;
nestedStruct.c = 'A';
nestedStruct.my_double_nested_structure.x = 4;
nestedStruct.my_double_nested_structure.y = 8.9;
nestedStruct.my_double_nested_structure.z = 'B';
nestedStruct.my_double_nested_structure.array1[0] = 'B';
nestedStruct.my_double_nested_structure.array1[1] = 'C';

main()
{
    myAMapType finalMap;
    finalMap.insert(std::pair<int, S_A>(3, nestedStruct);
}

4 个答案:

答案 0 :(得分:2)

如果在struct S_B之前定义struct S_A,您的代码将编译并运行,因为您将S_B类型的成员对象置于S_A定义,这意味着必须在该点定义完整类型S_B(如果它只是指向对象的指针然后不完整的类型就足够了。

你必须提出作业

nestedStruct.a = 5;
nestedStruct.b = 5.9;
nestedStruct.c = 'A';
nestedStruct.my_double_nested_structure.x =4;
nestedStruct.my_double_nested_structure.y =8.9;
nestedStruct.my_double_nested_structure.z ='B';
nestedStruct.my_double_nested_structure.array1[0] ='B';
nestedStruct.my_double_nested_structure.array1[1] ='C';
进入一些功能。在全局范围内只允许声明/定义(不是表达式语句等)。

在全局范围内,您可以使用结构的初始化列表:

S_A nestedStruct = { 5, 5.9, 'A', { 4, 8.9, 'B', { 'B', 'C' } } };

对于没有显式构造函数(如结构)的类以及此类的数组或简单类型的数组,允许使用初始化列表。

答案 1 :(得分:1)

是。只要没有指针,这就被编译成一个可以复制的整体对象(例如,复制到容器中)。

由于前向引用S_B,缺少括号等,

还会导致您的代码无法编译

答案 2 :(得分:0)

这种方法有效(除了代码中的拼写错误等)。原因如下:

映射复制 - 将您的案例S_A中复制的对象构造到其内部数据中。此外,S_A还有一个默认的(自动生成的)复制构造函数,它逐个复制所有字段,并调用S_B的复制构造函数来复制字段my_double_nested_structure。它还有一个默认的复制构造函数 - 按顺序 - 复制其所有字段。

因此,在插入过程中,所有数据都会正确复制到地图中。

请记住,如果这些结构有任何指针,那么指针本身将被复制 - 而不是它们指向的对象。

答案 3 :(得分:0)

正如其他人所说,代码应该有效,除了错别字。通常我会使用[] - 运算符插入地图,例如finalMap[3]=nestedStruct