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