スタック オーバーフローには、.Net および C# でのプライオリティ キューの実装を扱うスレッドがいくつかあります。
私の問題はより基本的な性質のものです: .Net フレームワークにすぐに使用できるプライオリティ キューがないのはなぜですか? C++ 標準ライブラリにもあります。
スタック オーバーフローには、.Net および C# でのプライオリティ キューの実装を扱うスレッドがいくつかあります。
私の問題はより基本的な性質のものです: .Net フレームワークにすぐに使用できるプライオリティ キューがないのはなぜですか? C++ 標準ライブラリにもあります。
少し前に質問があり (なぜ C# は C++ のような非メンバー関数を許可するのか)、Eric Lippert がその理由についてブログ投稿を書くようになりました。その中で、彼は次のように説明しています。
「なぜ C# は機能 X を実装しないのですか?」と尋ねられます。いつも。答えは常に同じです。その機能を設計、指定、実装、テスト、文書化、および出荷した人は誰もいないからです。機能を実現するには、これら 6 つのすべてが必要です。それらはすべて、膨大な時間、労力、および費用がかかります。機能は安価ではありません。限られた時間、労力、予算の中で、ユーザーに可能な限り最高の利益をもたらす機能のみを出荷するように努めています。
おそらくそれが、.Net にプライオリティ キューが同梱されていない理由に対する答えだと思います。実装するのに十分な時間、労力、お金、需要 (?) がありませんでした。
.NET 4.0では、およびによって実装されるインターフェイスSortedSet<T>
とともに、クラスが導入されています。これにより、独自のクラスの実装が明らかに簡単になります。ISet<T>
SortedSet<T>
HashSet<T>
PriorityQueue<T>
IQueue<T>
ただし、少なくとも優先キューまたは基本的なBCL以外の実装の必要性を認めるインターフェイスはまだありませんQueue<T>
。同様に、はありませんIStack<T>
。
個人的には、これらの最も基本的なインターフェースのいくつかの欠如は、特に既存のクラスから単純なインターフェースを抽出するための設計/仕様/実装/テスト/文書化のコストが実際に非常に低いはずなので、失望して近視眼的だと思います。
public interface IQueue<T> : IEnumerable<T>, ICollection, IEnumerable
{
T Dequeue();
void Enqueue(T item);
T Peek();
}
ほら?私はそれをしました。