2011-12-27 14 views
3

マップコンテナ内の要素をキーではなく値を使って並べ替える必要があります。どうやってするの?私はそのマップがキー値でソートできることを知っていますが、その逆はどうやって行うのですか。私はstackoverfrlowで同じ質問を見つけました。私はこれが好きですsolution。しかし、私は "ダンプin pair<K,V>"という意味を明確にしたいと思います。私はそれのための特別な構造を作成したくない、それはエレガントではありません。あなたはどうすればsolutionを実装していますか?C++、stl、キーではなく値で並べ替える方法

+1

地図の目的はキーでソートすることです...同じ時間に2つをソートすることはできません。(私はdownvote :)) –

+0

"ソートマップコンテナ"とはどういう意味ですか?実際に要素をソートするか、検索のキーと値の役割を元に戻しますか? 「ペアでダンプする」とは、ペアから新しいキー/値のペアを挿入することですか? (心は、私はdownvoterではなかった) – ssube

+3

私は問題が何であるかがはっきりしていないのであなたの質問をd​​ownvoted。 「エレガントではない」とは何ですか?リンクした質問には、3つの選択肢があり、3つの回答があります。 –

答えて

19

std :: mapの情報をstd :: vectorにダンプするために、2つのイテレータをとるstd :: vectorのコンストラクタを使用することができます。

std::vector<std::pair<K,V> > myVec(myMap.begin(), myMap.end()); 

あなたは、その後でそれをソートします:あなたは彼らが正しい順序になっている場合、それは真を返す持っ

bool myFunction(std::pair<K,V> first, std::pair<K,V> second); 

:署名で定義された関数になり

std::sort(myVec.begin(),myVec.end(),&myFunction); 

myFunction (最初は2番目の前にすべきです)。それらの順序が間違っている場合はfalseを返します(つまり、2番目は最初のものにする必要があります)。


また、あなたはあなたの問題にもっと敏感に思われる、boost::bimapで見たいと思うかもしれません。

+0

私はstd :: pairがあることを知らなかった。便利なのは – ashim

+0

ですが、マップが変更されるたびに、新しいコンテンツで並べ替えるためにベクトルと同じ操作をやり直す必要があります。 –

+0

eharvest:ええ、彼はおそらく秘密にブースト:: bimapを望んでいます。 – Lalaland

関連する問題