stlのmapをソートしたい

[戻る]
2004/12/08(水) 01:32:22
お世話になっております。

stlのmapをstd::sortを使用し以下のソートを行いたいと思っています。

・キーでのソート
・値でのソート

sortの引数に以下のように渡してもエラーが出てしまいます。
std::map<CString, CString> Data;
std::sort(Data.begin(), Data.end(),  std::greater<CString> >());

ソートする場合はベクトルに一度代入しないとソートすることができないのでしょうか?
std::vector<CStrign> Data;
std::sort(Data.begin(), Data.end(),  std::greater<CString> >());

2004/12/08(水) 05:02:55
>エラーが出てしまいます
コンパイルエラー、リンクエラー、実行時のエラーのどれでしょうか?
コンパイルエラーや、リンクエラーなら、エラー番号とエラーメッセージ等を正直に示して
下さい

マップで何故、どのようなソートが必要なのでしょうか?
ソートできたとして、どうしたいのでしょうか?

あと、コンパイラーやどういった STL をお使いなのかお示しください

επιστημη 2004/12/08(水) 05:03:20
mapはキーの大小を基に要素を管理しているので、ユーザが勝手に変更できません。

monkey 2004/12/08(水) 09:28:46
デフォルトではキーの昇順に格納されるのを、降順にしたいということでしょうか。

降順のマップだけがほしいのであれば、

std::map< CString, CString, std::greater< CString > > Data;

とするし、
昇順のマップから降順のマップにデータをコピーするなら、

std::map< CString ,CString > DataA; // 昇順のマップ

// DataAにデータを格納

std::map< CString, CString, std::greater< CString > > DataB; // 降順のマップ
std::copy( DataA.begin(), DataA.end(), std::inserter( DataB, DataB.begin() ) );

とでもするのかな。

# 昇順のマップを降順に、あるいはその逆の変更はできません。

PATIO 2004/12/08(水) 14:04:12
std::mapがどんな物かを突き詰めれば、ソートできないことは自明の理かと。
動的にソートが必要なのであれば、普通のvectorとかでも良い様な気がします。

2004/12/09(木) 02:16:05
[[解決]]
mapでできればいいなと思い質問させていただいたのですが、
やはり無理なようですね。

vectorとpairを使ってソートを行いたいと思います。
ありがとうございました。

古いスレッドには追加発言できません。