/// <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); }
public Int32 CompareTo(ItemAndPriority <T> other) { if (priority != other.priority) { return(priority.CompareTo(other.priority)); } else { return(item.CompareTo(other.item)); } }
/// <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); }
/// <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); }
/// <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); }