How to convert a multimap<int,int> to vector<pair<int,int> > efficiently
如何转换的矢量<对<int,int>>以有效地多重映射<int,int>?
编辑: 对不起,我其实是在寻找将矢量地图
How to convert a multimap<int,int> to vector<pair<int,int> > efficiently
如何转换的矢量<对<int,int>>以有效地多重映射<int,int>?
编辑: 对不起,我其实是在寻找将矢量地图
一个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));
EDIT 要回答你的其他问题 - 你可以用类似的方法将矢量转换成多图。 multimap中还具有接受一个迭代范围内的构造:
std::multimap<int,int> mmap(v.begin(), v.end());
这当然,假定v
是std::vector< std::pair<int,int> >
。
C++中关联容器的值类型有一个常量键。即:标准:: multimap中 :: VALUE_TYPE是标准::对。其原因是,如果该键是不恒定的,也可能是通过非const迭代器打破容器不变量发生变化(该元素将是一个错误的位置上的密钥更新后) –
2009-08-21 06:59:36