リストのソート

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
ちゅん

リストのソート

#1

投稿記事 by ちゅん » 16年前

こんばんは、毎度お世話になっております。

早速質問です。
C++のリストを利用しているのですが、リストの要素のメンバを用いてのソートはできないのでしょうか。

これでは解りにくいと思いますので、具体的に述べますと、
所持しているアイテムを格納しているリスト

std::list<Item*> belongingList があります。

Itemクラスには、int型のitemNumというメンバ変数がありまして、これを元に昇順にソートをしたいのです。
所持品の中には装備も含まれておりますので、アドレスは変えたくありません。

やはり、自分でリストを作った方が良いのでしょうか?

Justy

Re:リストのソート

#2

投稿記事 by Justy » 16年前


>リストの要素のメンバを用いてのソートはできないのでしょうか。

 listは Itemのポインタを持っている状態なのですね。

 できますよ。
 listの sortメンバ関数にはユーザー定義の比較関数や関数オブジェクトを指定することができます。

ttp://www.cppll.jp/cppreference/cpplist_details.html#sort

 たとえば、
[color=#d0d0ff" face="monospace]
bool ItemComp(const Item* lhs, const Item*rhs)
{
return lhs->itemNum < rhs->itemNum;
}
[/color]

 こういう関数を用意して、
[color=#d0d0ff" face="monospace]
std::list<Item*> list;
...
list.sort(&ItemComp);
[/color]

 こんな感じで。

たかぎ

Re:リストのソート

#3

投稿記事 by たかぎ » 16年前

std::list<Item*>::sortに比較用のファンクタを渡せば解決します。

ちゅん

Re:リストのソート

#4

投稿記事 by ちゅん » 16年前

Justyさん、たかぎさん、ありがとうございました!
おかげで無事に解決できました。

こんな簡単な操作で解決できるとは…
半ば諦めてリストを作り直そうとすら思っていたので、本当に助かりました!

閉鎖

“C言語何でも質問掲示板” へ戻る