タイトルの「ソート」という単語が誤解を招く可能性があります。私はこの動作を探しています:STLまたはBoostはマップを値でソートするのに役立ちますか?
{ 1: 100, { 1: 1,
3: 10, => 3: 10,
5: 1000, 5: 100,
9: 1 } 9: 1000 }
つまり、値を既存のキーに昇順に再割り当てします。
これは一時的に行うのは難しいことではないでしょう。
using K = int;
using V = int;
std::map<K, V> myMap{ {1, 100}, {3, 10}, {5, 1000}, {9, 1} };
std::vector<V> tempVec; // insert map values into vector
std::transform(myMap.begin(), myMap.end(), std::back_inserter(tempVec),
[](auto const& mapPair) { return mapPair.second; });
std::sort(tempVec.begin(), tempVec.end());
size_t i = 0;
for (auto& mapPair : myMap) {
mapPair.second = tempVec[i++];
}
この簡素化することができるか、さらに良い、場所で行われますか?
、キーまたは値のどちらかがユーザー定義型であれば、あなたがSTDをオーバーロードでき::マップの 'value_type'のためのスワップ(あなたがSTDに過負荷を追加するために許可されている::名前空間は、使用に依存している場合定義された型)を使用して値の部分だけをスワップし、カスタムコンパレータでstd :: sortを使用します。実際には、それは良い考えではありません。 –
@Revolver_Ocelotデフォルトの動作が望まれるコンテキストでカスタムオーバーロードを取り除くのは難しいでしょうか? –
はい。しかし、mapの 'value_type'はデフォルトの動作が_compile error_の' pair 'なので、_this_は問題ではないと思います。 'std :: sort'を見て' std :: map'を見て、何を魔法にしているのか把握しようとする人は、問題です。 –