如何在C++中构造结构向量图
我有一个映射std::mapmyMap,我的结构定义如下如何在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,您可以在地图之外构造向量,然后将该向量移动到地图中,而无需任何复制。一种方法是
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,因为这就是您声明它的方式。