[英]How to convert a vector<pair<int,int> > to multimap<int,int> efficiently?
How to convert a multimap<int,int> to vector<pair<int,int> > efficiently
編輯:對不起,我實際上正在尋找將向量轉換為地圖的麻煩
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) );
編輯要回答您的其他問題-您可以通過類似的方式將矢量轉換為多圖。 多圖還具有一個接受迭代器范圍的構造函數:
std::multimap<int,int> mmap(v.begin(), v.end());
當然,這假定v
是std::vector< std::pair<int,int> >
。
我相信,幼稚的方法也是最有效的方法:遍歷multimap,然后將每個元素添加到向量中。 作為優化,您應該在開始之前v.reserve(m.size)
。
元素通常存儲在多圖的樹中,分布在堆中的對象中。 對於矢量,它們必須位於連續內存中:這要求您確實必須將它們一起復制。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.