私はマップがそのが頻繁にはstd ::並べ替えをサポートしていません実際に。高速でランダムキーのアクセスのために最適化され、かつ、ソートする準備ができていないことを承知しています。は、出力の前に値でのstd ::マップのソート&破壊
私の現在の問題は、私はちょうど値(int型)の順序で10ペアを抽出し、それを破壊する必要があり、私はもう使用するつもりはない
map<std::string,int>
フル
を持っていることです。ことが可能であった場合の最もよい事は場所でそれをソートし、それを10回繰り返すことであろうが、それは明らかに解決策ではありません。
私は(重複キーを許可する)マルチマップを経由するなど、さまざまなソリューションをしようとしているが、私はとりうる限りSTLアルゴリズムを使用して、よりエレガントな解決策があるかどうかを知りたいのです。
編集:私はマップとしてそれを必要とする時間の99%を、高速のキールックアップが値を増加するので、私はマップを使用してい
。ただ、私はもうマップを必要としないとき、後に値順に抽出するのに良い方法が必要です。
現在のアプローチがあることwhould:
- のstd ::ベクトル(ペア(のstd ::文字列、int型))
- ソートベクトルにマップ(のstd ::文字列、int)をコピーし
- は、マップのイテレータを使用して反復した場合、それは内部的にバランスの取れたBINAを使用すると、あなたはアイテムがキーでソートされます最初の10個の値
- がベクトルを破壊し、
あなたの要件は私にとって非常に不明です。 IIUCでは、キーの代わりに値_によってマップ内の10個のエントリを見つける必要がありますか?一度あなたがそれらを持っていれば、あなたはそれらと何をするつもりですか?私は "破壊"はあいまいな用語であり、 'std :: pair'の意味を推測することができないので尋ねます。それらは地図から削除されますか? (おそらくあなたはあなたがもう地図を必要としていないと言いましたが、他に何がありますか?) –
sbi
マップは破壊されるので、後で何が起こるかは気にしません。これらの10の値を持つ必要があります –