如何转换向量<pair <int,int>&gt;到multimap <int,int>有效吗?</int,int> </pair <int,int>

时间:2009-08-20 05:49:13

标签: c++ data-structures

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

编辑: 很抱歉我实际上正在寻找将矢量转换为地图的麻烦

2 个答案:

答案 0 :(得分:5)

multimap<int,int>的值类型为pair<int,int> - 正是您希望向量保持的值。因此,您可以使用构造函数初始化multimap中的向量:

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());

当然,这假定vstd::vector< std::pair<int,int> >

答案 1 :(得分:1)

我相信天真的方法也是最有效的方法:迭代多重图,并将每个元素添加到向量中。作为优化,您应该在开始之前v.reserve(m.size)

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