示例#1
0
        /// <summary>
        /// Removes the specified item from the queue.
        /// </summary>
        /// <param name="item">The item to remove.</param>
        /// <exception cref="System.ArgumentException">The item does not exist in the queue.</exception>
        public void Remove(T item)
        {
            ThrowExceptionIfItemDoesntExistInQueue(item, "item");

            Double priority = itemToPriorityMap[item];
            ItemAndPriority <T> itemAndPriorityToRemove = new ItemAndPriority <T>(item, priority);

            tree.Remove(itemAndPriorityToRemove);
            itemToPriorityMap.Remove(item);
        }
示例#2
0
 public Int32 CompareTo(ItemAndPriority <T> other)
 {
     if (priority != other.priority)
     {
         return(priority.CompareTo(other.priority));
     }
     else
     {
         return(item.CompareTo(other.item));
     }
 }
示例#3
0
        /// <summary>
        /// Removes and returns the item with the highest priority.
        /// </summary>
        /// <returns>The item with the highest priority.</returns>
        public T DequeueMinimum()
        {
            ThrowExceptionIfQueueIsEmpty();

            ItemAndPriority <T> lowestPriorityItem = tree.GetNextGreaterThan(new ItemAndPriority <T>(default(T), -0.1)).Item2;

            Remove(lowestPriorityItem.Item);
            itemToPriorityMap.Remove(lowestPriorityItem.Item);

            return(lowestPriorityItem.Item);
        }
示例#4
0
        /// <summary>
        /// Removes and returns the item with the lowest priority.
        /// </summary>
        /// <returns>The item with the lowest priority.</returns>
        public T DequeueMaximum()
        {
            ThrowExceptionIfQueueIsEmpty();

            ItemAndPriority <T> highestPriorityItem = tree.GetNextLessThan(new ItemAndPriority <T>(default(T), 1.1)).Item2;

            Remove(highestPriorityItem.Item);
            itemToPriorityMap.Remove(highestPriorityItem.Item);

            return(highestPriorityItem.Item);
        }
示例#5
0
        /// <summary>
        /// Adds an item to the queue
        /// </summary>
        /// <param name="item">The item to add.</param>
        /// <param name="priority">The priority of the item.</param>
        /// <exception cref="System.ArgumentException">The item already exists in the queue.</exception>
        /// <exception cref="System.ArgumentOutOfRangeException">Parameter 'priority' must be between 0.0 and 1.0 inclusive.</exception>
        public void Enqueue(T item, Double priority)
        {
            if (itemToPriorityMap.ContainsKey(item))
            {
                throw new ArgumentException("The item '" + item.ToString() + "' already exists in the queue.", "item");
            }
            if (priority < 0.0 || priority > 1.0)
            {
                throw new ArgumentOutOfRangeException("priority", "Parameter 'priority' must be between 0.0 and 1.0 inclusive.");
            }

            ItemAndPriority <T> newItem = new ItemAndPriority <T>(item, priority);

            tree.Add(newItem);
            itemToPriorityMap.Add(item, priority);
        }