代码之家  ›  专栏  ›  技术社区  ›  yesraaj

如何有效地将向量<pair<int,int>>转换为multimap<int,int>?

  •  1
  • yesraaj  · 技术社区  · 16 年前

    How to convert a multimap<int,int> to vector<pair<int,int> > efficiently

    编辑: 抱歉,我在找把矢量转换成地图的麻烦。

    2 回复  |  直到 15 年前
        1
  •  5
  •   Bojan Resnik    16 年前

    a的值类型 multimap<int,int> pair<int,int> -正是你希望向量保持的。因此,可以使用构造函数从多映射初始化向量:

    std::vector< std::pair<int,int> > v( mmap.begin(), mmap.end() );
    

    或者,如果您有一个要复制元素的现有向量:

    v.resize( mmap.size() );
    std::copy( mmap.begin(), mmap.end(), v.begin() );
    

    您也可以使用 std::back_inserter ,但一般来说,由于矢量重新分配,速度会变慢:

    std::copy( mmap.begin(), mmap.end(), std::back_inserter(v) );
    

    编辑 为了回答你的另一个问题,你可以用类似的方法把一个向量转换成多重映射。multimap还具有一个接受迭代器范围的构造函数:

    std::multimap<int,int> mmap(v.begin(), v.end());
    

    当然,这是假设 v std::vector< std::pair<int,int> > .

        2
  •  1
  •   Martin v. Löwis    16 年前

    我相信幼稚的方法也是最有效的方法:遍历多映射,并将每个元素添加到向量中。作为优化,您应该 v.reserve(m.size) 在你开始之前。

    元素通常存储在多映射中的树中,以及分布在堆中的对象中。对于向量,它们必须在连续内存中:这要求您必须将它们复制在一起。