c++ - 如何以优雅的方式将 vector 复制到STL中的 map

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

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

vector :元素1、元素2、元素3、元素4 ...元素N。

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

目前,我只是枚举 vector ,有没有其他优雅的方式来做到这一点。 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]) );

我认为这最终会从这对 map 条目中复制构造。在 C++11 中你可以这样做:

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

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

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

关于c++ - 如何以优雅的方式将 vector 复制到STL中的 map ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23259313/

相关文章:

c++ - 此数组中的某些值无特殊原因变为零 (0)

c++ - 在Jenkins "exec"中运行 "Execute Shell"命令

c++ - VS2008 SP1 中的 Lambda 表达式支持

c++ - 这些哪个更快?

C++ replace_if on vector with struct in STL

c++ - 将哈希表重载为 vector 的 [] 运算符

c++ - 功能优化通

c++ - Git 状态显示奇怪的未跟踪 "path_of_file\r"文件,如何通过命令行删除

c++ - 执行简单的 boost 线程程序时出错

c++ - 理解 std::function 的晦涩模板参数