Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/150.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在C++中构造结构向量图_C++_Struct_Stdvector_Stdmap - Fatal编程技术网

如何在C++中构造结构向量图

如何在C++中构造结构向量图,c++,struct,stdvector,stdmap,C++,Struct,Stdvector,Stdmap,我有一个映射std::mapmyMap,我的结构定义如下 struct Data { int x; int z; int y; }; 在myMap中,键是int,值是结构的向量,我不想在插入到地图时创建临时向量或结构。有什么办法可以实现吗?一种方法是使用emplace和std::move 通过使用std::move,您可以在地图之外构造向量,然后将该向量移动到地图中,而无需任何复制。一种方法是

我有一个映射std::mapmyMap,我的结构定义如下

        struct Data
        {
         int x;
         int z;
         int y;
        };
在myMap中,键是int,值是结构的向量,我不想在插入到地图时创建临时向量或结构。有什么办法可以实现吗?

一种方法是使用emplace和std::move

通过使用std::move,您可以在地图之外构造向量,然后将该向量移动到地图中,而无需任何复制。

一种方法是使用emplace和std::move


通过使用std::move,您可以在映射之外构造向量,然后将该向量移动到映射中而无需任何复制。

正如前面的答案所述,您可以使用emplace和std::move,但为了测试它或任何其他解决方案是否有效,我建议您重写构造函数、复制构造函数、析构函数,和赋值操作符分别打印创建、复制、销毁、赋值等内容,以便了解实际情况并提高性能。

正如前面的回答所述,您可以使用emplace和std::move,但为了测试它或任何其他解决方案是否有效,我建议您重写构造函数,复制构造函数,析构函数和赋值运算符,分别打印创建、复制、销毁和赋值之类的内容,以便了解实际情况并提高性能。

无需显式初始化映射中的值。当您访问映射中不存在的密钥时,它将添加一个默认初始化值,在您的情况下为空std::vector

所以你可以安全地做一些类似的事情

myMap[0].push_back(myInstanceOfData)

即使密钥0不存在。然后它将与一个空向量一起创建为值,值myInstanceOfData将被推送到映射内的这个新向量。

您不需要显式初始化映射中的值。当您访问映射中不存在的密钥时,它将添加一个默认初始化值,在您的情况下为空std::vector

所以你可以安全地做一些类似的事情

myMap[0].push_back(myInstanceOfData)

即使密钥0不存在。然后,它将与一个空向量作为值一起创建,值myInstanceOfData将被推送到映射内的这个新向量。

myMap[123]返回该键处的向量引用,如果该向量不存在,则创建它,因此myMap[123]。推回{x,y,z};应该将{x,y,z}添加到新创建/现有的向量,而不使用临时向量。类似于myMap[123]的东西返回对该键处向量的引用,如果向量不存在,则创建它,因此myMap[123]返回{x,y,z};应该将{x,y,z}添加到新创建/现有的向量,而不使用临时向量。类似于我不想创建向量的额外对象。我想直接插入到地图中,而没有向量的任何对象。最好使用初始化列表,在这里不创建额外的对象。您只有存储在地图中的对象。直接插入到地图而不包含向量的任何对象-抱歉,不确定您在这里的意思,您有一个以std::vector作为值的地图,您将始终在地图中存储std::vector,因为这就是你声明它的方式。我不想创建向量的额外对象。我想直接插入到地图中,而没有向量的任何对象。最好使用初始化列表,你不需要在这里创建额外的对象。您只有存储在地图中的对象。直接插入到映射,而不包含向量的任何对象-抱歉,不确定您在这里的意思,您有一个以std::vector作为值的映射,您将始终在映射中存储std::vector,因为这就是您声明它的方式。