如何在 c++ 中创建结构向量的映射

How to create the map Of the vector of structure in c++

本文关键字:结构 向量 映射 创建 c++      更新时间:2023-10-16

我有一个地图std::map<int, std::vector<Data>>myMap,我的结构定义如下。

struct Data
{
int x;
int z;
int y;
};

在 myMap 键是 int,值是结构的向量,我不希望在插入地图时创建临时向量或结构。有什么想法可以实现它吗?

一种方法是使用emplacestd::move

myMap.emplace(key, std::move(myVec));

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

无需显式启动映射中的值。当您通过映射中不存在的operator[]访问密钥时,将使用默认初始化值(在您的情况下为空std::vector(添加该密钥。

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

myMap[0].push_back(myInstanceOfData)

即使键 0 不存在。然后,它将与一个空向量一起创建为值,并将值myInstanceOfData推送到地图内的这个新向量。

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