簡體   English   中英

如何轉換向量 <pair<int,int> &gt;到多圖 <int,int> 有效率的?

[英]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());

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

我相信,幼稚的方法也是最有效的方法:遍歷multimap,然后將每個元素添加到向量中。 作為優化,您應該在開始之前v.reserve(m.size)

元素通常存儲在多圖的樹中,分布在堆中的對象中。 對於矢量,它們必須位於連續內存中:這要求您確實必須將它們一起復制。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM