目前,我在矢量中有一些数据。目前,我想将矢量转换为地图 所以它将如下组织(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;
}
答案 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]) );