Kephas не предоставляет сам контейнер DI / IoC, он обеспечивает только уровень абстракции над контейнерами DI / IoC, так что он может использовать саму композицию без привязки к конкретной реализации. Он предоставляет адаптер для этого уровня абстракции для System.Composition
в пакете Kephas.Composition.Mef ( https://www.nuget.org/packages/Kephas.Composition.Mef/ ). Мы запланировали также адаптер для Autofac
, но у нас не было времени, чтобы реализовать его до конца.
Обратите внимание, что этот уровень абстракции имеет некоторые особенности, уникальные для Kephas:
[*AppServiceContract]
. Также обратите внимание, что поддержка метаданных является обязательной функцией для интегрированных сред, с которыми интегрируется Kephas, что в некоторых случаях может налагать ограничения. Для получения дополнительной информации вы можете прочитать здесь: https://github.com/kephas-software/kephas/wiki/Composition-and-Dependency-Injection .
Большинство приоритетных очередей реализованы в виде кучи Фибоначчи или чего-то подобного. Эта структура данных поддерживает извлечение минимума в постоянное время, что делает естественным присвоение нулю наивысшего приоритета и удаление элементов из очереди путем извлечения минимума.
Если оно когда-либо увеличивается, как вы можете установить что-либо на самый высокий приоритет? (+1 к ответу Россфаба:)
В качестве контрпримера, в том, что, безусловно, является одной из наиболее доступных (если не используется) реализаций очереди приоритетов, а именно STL std :: priority_queue
, элемент top ()
является численно самым высоким согласно оператору <
. Конечно, все привыкли к условию наименьшего порядка сортировки, стоящего перед очередью, поэтому это привлекает внимание многих людей при первом его использовании.
Не думаю, что для этого есть какая-то конструктивная причина. Вероятно, это просто потому, что большинство программистов привыкли думать о 0 как о первом элементе. Другая причина может быть в том, что перечислители начинаются с 0, поэтому первое определенное целочисленное значение enum будет равно 0.
Причина, по которой часто бывает наоборот, заключается в том, что очереди с приоритетами используются для реализации алгоритмов, подобных алгоритму Дейкстры и A *, где приоритет - это расстояние до узла, и вы хотите сначала обработать более близкие узлы. .
There is nothing inherent about a priority queue that makes 0 a better choice for top priority. For someone writing a reusable implementation however, you will have to pick something, and 0 is well defined no matter what type of integral or floating point value you use for your priority.
Even in writing a private implementation, if you decide you only need 256 priority levels and use an unsigned char as your priority and have 255 be your top priority, then you will need to carefully look over all your code if you decide that you need more levels.