如何在STL中以优美的方式复制矢量到映射

How to copy vector to map in STL in a graceful way

本文关键字:复制 方式 映射 STL      更新时间:2023-10-16

目前,我在向量中有一些数据。目前,我想将矢量转换为贴图
所以它将被组织如下(N是偶数)。

矢量:元素1,元素2,元素3,元素4。。。元素N.

映射:键1:元素1,值1:元素2,键2:元素3值2:元素4…

目前,我只是列举向量,还有其他优雅的方法吗?C++11更可取。谢谢

for (int x = 0; x < vec.size(); )
{
    map[vec[x]] = vec[x+1];
    x+=2;
}

您的代码是有效的(注意Michael J的建议,如果有奇数,就不处理最后一个元素)。

还有一点可以改进。调用map[vec[x]]使用value_type的默认构造函数构造一个条目,然后复制赋值运算符从vec[x+1]复制值。

您可以通过执行以下操作来避免副本分配步骤:

the_map.insert( std::make_pair(vec[x], vec[x+1]) );

我认为这最终会得到由这对构建的地图条目副本。在C++11中,你可以做:

the_map.emplace(vec[x], vec[x+1]);

这允许编译器最小化所完成的复制量。如果你的对象支持移动语义,并且你想在之后销毁向量,你甚至可以去:

the_map.emplace( std::move(vec[x]), std::move(vec[x+1]) );