stlのmapをソートしたい – プログラミング – Home

通知
すべてクリア

[解決済] stlのmapをソートしたい


戒
 戒
(@戒)
ゲスト
結合: 20年前
投稿: 2
Topic starter  

お世話になっております。

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> >());


引用未解決
トピックタグ
島
 島
(@島)
ゲスト
結合: 22年前
投稿: 238
 

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

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

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


返信引用
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 22年前
投稿: 1301
 

mapはキーの大小を基に要素を管理しているので、ユーザが勝手に変更できません。


返信引用
monkey
 monkey
(@monkey)
ゲスト
結合: 20年前
投稿: 70
 

デフォルトではキーの昇順に格納されるのを、降順にしたいということでしょうか。

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

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
(@patio)
Famed Member
結合: 3年前
投稿: 2660
 

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


返信引用
戒
 戒
(@戒)
ゲスト
結合: 20年前
投稿: 2
Topic starter  

mapでできればいいなと思い質問させていただいたのですが、
やはり無理なようですね。

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


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました