3

重複の可能性:
.Net の優先キュー

この質問は似ていますが、正確に知りたいです:

プライオリティ キューの .Net にクラス/構造体/... はありますか? このために持っているSTLのように priority_queueカスタマイズされた並べ替えをサポートする比較関数を受け入れます。

私が .Net で見つけた最良のものは、キーで値をソートするSortedList< Key, Value >です。したがって、1 つの解決策は、Key クラスのカスタムCompareインターフェイスを実装することです。しかし、要素をキーと値のペアに分けることはできません。カスタム関数を使用して値に応じてキューに入れる必要があるアトミック要素があります。

それで、要素を並べ替えるための比較関数を受け入れる.Netのコレクションクラスはありますか?

この機能をサポートする .Net クラス (おそらくHashSet ) を派生させる方法はありますか?


ノート:

  • 多くのサードパーティがこのために非常に優れたクラスを実装していることを知っています。おそらく良い例はPowerCollectionsです。しかし、.Net の既存のクラスを使用した迅速でシンプルなソリューションが必要です
  • 私は.Net Framework 3.5を使用しています
4

2 に答える 2

3

汎用のSortedDictionaryクラスを使用できます。

オブジェクトの優先順位の比較を処理するコンストラクターに比較オブジェクトを指定できます。

public class DataComparer : IComparer<Data>
{
    public Int32 Compare(Data a, Data b)
    {
        if (a == null && b == null)
            return 0;
        if (a == null)
            return -1;
        if (b == null)
            return +1;
        return a.Priority.CompareTo(b.Priority);
    }
}

SortedDictionary<Data, Data> priQueue = new SortedDictionary<Data, Data>(
    new DataComparer());
于 2009-10-26T11:44:39.373 に答える
1

クラスに IComparable を実装し、クラス内に特定の比較子を作成するだけで、 IList.Sort() を使用できますか?

于 2009-10-26T11:28:33.560 に答える