2009-08-20 79 views

回答

5

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

這當然,假定vstd::vector< std::pair<int,int> >

+0

C++中關聯容器的值類型有一個常量鍵。即:標準:: multimap中 :: VALUE_TYPE是標準::對。其原因是,如果該鍵是不恆定的,也可能是通過非const迭代器打破容器不變量發生變化(該元素將是一個錯誤的位置上的密鑰更新後) – 2009-08-21 06:59:36

1

麻煩我相信,天真的方法也是最有效的一個:遍歷multimap中,每一個元素添加到矢量。作爲優化,您應該在開始之前v.reserve(m.size)

的元素通常被存儲在一個樹中的多重映射,在散佈在堆中的對象。對於載體,它們必須處於連續記憶中:這要求你真的必須將它們複製在一起。

+0

OK,然後是有可能做的for_each? – yesraaj 2009-08-20 07:00:16

+1

無需:矢量::分配(ITER開始,Iter項目結束)是一個單一的操作這需要兩個存儲器allcoation和環路的照顧。 – MSalters 2009-08-20 07:27:45

相關問題