2016-08-26 4 views
0

ベクトルに変換したい地図があります。しかし、私はキーと値を反転したい。それらを新しい鍵に従って順序付けします。しかし、約300.000の要素がある間はできるだけ速くなければなりません。より良いexplenationについてはマップ(値、インデックス)をベクトル(インデックス、値)にC++で変換する最速の方法は何ですか?

地図:

a->5 
b->3 
c->4 
d->2 
e->6 
f->1 

ベクトルがthis->[f,d,b,c,a,e]

ようなことSHOLDそれは一つのループでは可能ですか?

+0

パフォーマンスが最速で、コーディング時間が最速ですか? –

+0

あなたの '1つのループ'の解釈に依存します..とにかく:あなたのキーと値はどちらも整数ですよね?あなたは少し混乱しているb cを表示するので。 – stijn

+0

いいえ、実際に値は3つの浮動小数点値を含む点です –

答えて

2

実際はとてもシンプルです。

std::vector<std::string> myVector(myMap.size()); 
for (auto const& mapEntry : myMap) { 
    myVector[mapEntry->second - 1] = mapEntry->first; 
} 

ただし、インデックス値のチェックは行われません。マップ値は文字列であると仮定します。 (ソートされたときに)これらが1から始まる連続した整数であることを確認しなければなりません。これはもちろんマップ自体では保証されません。重複や隙間が存在する可能性があります。

編集:ちょうどコメントの中で値が3つの浮動小数点座標を持つ点であることに気づいた。次に、コード内のstd::stringをポイントタイプで置き換えます。私は、浮動小数点値をマップキーとして使用することは、丸め誤差の可能性があるため、しばしば良い考えではないことを付け加えたいと思います。しかし、それはあなたの質問とは関係ありません。

関連する問題