如何在 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,值是结构向量,我不想在插入地图时创建临时向量或结构。有实现的想法吗?

一种方法是使用emplacestd::move

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

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

正如前面的回答所说,您可以使用 emplace 和 std::move,但是要测试它或任何其他解决方案是否有效,我建议您覆盖构造函数、复制构造函数、析构函数和赋值运算符分别打印诸如创建、复制、销毁、分配之类的内容,这样您就知道实际发生了什么,并提高性能。

您不需要显式初始化地图中的值。当您通过 operator[] 访问映射中不存在的键时,它将添加一个默认的初始化值(在您的情况下为空 std::vector)。

所以你可以安全地做类似

的事情
myMap[0].push_back(myInstanceOfData)

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