如何在 C++ 中创建结构向量的映射
How to create the map Of the vector of structure in c++
我有一张地图std::map<int, std::vector<Data>>myMap
,我的结构定义如下。
struct Data
{
int x;
int z;
int y;
};
在 myMap 中,键是 int,值是结构向量,我不想在插入地图时创建临时向量或结构。有实现的想法吗?
一种方法是使用emplace
和std::move
myMap.emplace(key, std::move(myVec));
通过使用 std::move
,您可以在地图外部构造矢量,然后将该矢量移动到地图中而无需任何复制。
正如前面的回答所说,您可以使用 emplace 和 std::move,但是要测试它或任何其他解决方案是否有效,我建议您覆盖构造函数、复制构造函数、析构函数和赋值运算符分别打印诸如创建、复制、销毁、分配之类的内容,这样您就知道实际发生了什么,并提高性能。
您不需要显式初始化地图中的值。当您通过 operator[]
访问映射中不存在的键时,它将添加一个默认的初始化值(在您的情况下为空 std::vector
)。
所以你可以安全地做类似
的事情
myMap[0].push_back(myInstanceOfData)
即使密钥 0 不存在。然后它将与一个空向量一起创建作为值,并且值 myInstanceOfData
将被推送到地图内的这个新向量。
我有一张地图std::map<int, std::vector<Data>>myMap
,我的结构定义如下。
struct Data
{
int x;
int z;
int y;
};
在 myMap 中,键是 int,值是结构向量,我不想在插入地图时创建临时向量或结构。有实现的想法吗?
一种方法是使用emplace
和std::move
myMap.emplace(key, std::move(myVec));
通过使用 std::move
,您可以在地图外部构造矢量,然后将该矢量移动到地图中而无需任何复制。
正如前面的回答所说,您可以使用 emplace 和 std::move,但是要测试它或任何其他解决方案是否有效,我建议您覆盖构造函数、复制构造函数、析构函数和赋值运算符分别打印诸如创建、复制、销毁、分配之类的内容,这样您就知道实际发生了什么,并提高性能。
您不需要显式初始化地图中的值。当您通过 operator[]
访问映射中不存在的键时,它将添加一个默认的初始化值(在您的情况下为空 std::vector
)。
所以你可以安全地做类似
的事情myMap[0].push_back(myInstanceOfData)
即使密钥 0 不存在。然后它将与一个空向量一起创建作为值,并且值 myInstanceOfData
将被推送到地图内的这个新向量。