ページ 11

リストのソート

Posted: 2009年5月05日(火) 23:59
by ちゅん
こんばんは、毎度お世話になっております。

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

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

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

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

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

Re:リストのソート

Posted: 2009年5月06日(水) 00:23
by Justy

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

 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:リストのソート

Posted: 2009年5月06日(水) 00:24
by たかぎ
std::list<Item*>::sortに比較用のファンクタを渡せば解決します。

Re:リストのソート

Posted: 2009年5月06日(水) 01:50
by ちゅん
Justyさん、たかぎさん、ありがとうございました!
おかげで無事に解決できました。

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