How to convert a multimap<int,int> to vector<pair<int,int> > efficiently
ベクトル<pair <int,int>>をマルチマップ<int,int>に効率よく変換する方法はありますか?
EDIT: は私が実際に
How to convert a multimap<int,int> to vector<pair<int,int> > efficiently
ベクトル<pair <int,int>>をマルチマップ<int,int>に効率よく変換する方法はありますか?
EDIT: は私が実際に
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 他の質問に答えるには、ベクトルを同様の方法でマルチマップに変換することができます。
std::multimap<int,int> mmap(v.begin(), v.end());
これは、もちろん、v
がstd::vector< std::pair<int,int> >
であることを前提としていますマルチマップはまた、イテレータ範囲を受け入れるコンストラクタを有します。
をマッピングするためにベクトルを変換するために探していたトラブルのため申し訳ありませんが、私は単純なアプローチはまた、最も効率的であると信じている:マルチマップを反復、および、各要素を追加ベクトル。最適化として、開始する前にv.reserve(m.size)
する必要があります。
要素は、通常、ヒープ上に広がるオブジェクト内のマルチマップのツリーに格納されます。ベクトルの場合、それらは連続したメモリになければなりません。これは本当にそれらを一緒にコピーする必要があります。
C++の連想配列の値型には定数キーがあります。つまり、std :: multimap :: value_typeはstd :: pair です。理由は、Keyが定数でない場合、コンテナ不変条件を破る非constイテレータによって変更される可能性がある(キー更新後に要素が間違った位置にあることがあるため) –