質問
可能な重複:
.Netの優先キュー
この質問は似ていますが、正確に知りたい:
.Netに優先キュー用のクラス/構造/ ...はありますか?このためにpriority_queue
を持つSTLのように。カスタマイズされたソートをサポートするために、比較関数を受け入れます。
.Netで見つけた最高のものは SortedList <!> lt; Key、Value <!> gt; キーで値をソートします。そのため、1つの解決策は、キークラスのカスタム比較インターフェースを実装することです。しかし、要素をキー/値のペアに分離することはできません。カスタム関数を使用して値に応じてキューに入れる必要があるアトミック要素があります。
では、要素を並べ替えるためのCompare関数を受け入れる.Netのコレクションクラスはありますか?
この機能をサポートする.Netクラス(おそらく HashSet )を派生させる方法はありますか?
注:
- 多くのサードパーティがこのために本当に良いクラスを実装していることを知っています。たぶん良い例は、 PowerCollections です。しかし、.Netの既存のクラスを使用した迅速でシンプルなソリューションが欲しい
- .Net Framework 3.5を使用しており、C#と同様です;)
解決
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());
他のヒント
クラスにIComparableを実装し、クラス内に特定の比較演算子を作成するだけで、IList.Sort()を使用できますか?
所属していません StackOverflow