如何在STL中以优美的方式复制矢量到映射
How to copy vector to map in STL in a graceful way
目前,我在向量中有一些数据。目前,我想将矢量转换为贴图
所以它将被组织如下(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]) );
相关文章:
- 复制部分文件的C++/增强方式
- 复制文件的最佳方式是什么,以便我可以在复制过程中轻松取消复制?
- 以最佳方式返回复制的值
- 尝试使用 Qt 库中的 QPixmap 将图像拆分为多个块。关于他的复制方法的工作方式,我有什么不明白的吗?
- 矩阵类编写构造函数,解构器和复制构造函数的方式
- 指针将其复制到另一个指针时的工作方式
- 复制到Texture2D和从Texture2D复制的最快捷方式
- 复制QMimeData对象的正确方式
- 由于您可以在C 中以两种方式声明复制构造函数,这是正确的方式
- 可执行文件在被复制时以某种方式损坏
- 将剪切、复制、粘贴快捷方式更改为Qt 5中的自定义槽
- 将C++缓冲区复制到Python的最佳方式
- 我需要以相反的方式复制一个长整型数组,我需要系统函数,例如 memcpy 有没有
- 复制构造函数快捷方式
- 以理智、安全和高效的方式复制文件
- 将子字符串从char*复制到std::string的优雅方式
- 以迭代方式复制二叉树
- 为什么派生类中复制/移动函数"normal"实现的行为会有所不同,具体取决于它们的定义方式?
- 复制构造函数未被调用,无法理解赋值运算符的工作方式
- 通过转换将C++向量复制到另一个向量的最佳方式