How to convert a multimap<int,int> to vector<pair<int,int> > efficiently
编辑: 很抱歉我实际上正在寻找将矢量转换为地图的麻烦
答案 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());
当然,这假定v
为std::vector< std::pair<int,int> >
。
答案 1 :(得分:1)
我相信天真的方法也是最有效的方法:迭代多重图,并将每个元素添加到向量中。作为优化,您应该在开始之前v.reserve(m.size)
。
元素通常存储在multimap中的树中,分布在堆上的对象中。对于向量,它们必须位于连续的内存中:这要求您必须将它们一起复制。