如何以优雅的方式将矢量复制到STL中的地图

时间:2014-04-24 03:32:55

标签: c++ c++11 vector map stl

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

vector:element 1,element 2,element 3,element 4 ... element N.

map:key1:element 1,value1:element 2,key2:element 3 value2:element 4 ...

目前,我只是枚举向量,还有其他任何优雅的方法来做到这一点。更喜欢C ++ 11。谢谢。

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

1 个答案:

答案 0 :(得分:6)

您的代码有效(注意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]) );