【发布时间】:2013-11-26 04:46:41
【问题描述】:
我需要一个数据结构,它是一种特殊类型的队列。我想要这样,如果我的队列的一个实例曾经包含一个对象 X,那么在这个实例中应该不可能再次将 X 加入队列。如果用 X 调用,入队方法应该什么都不做,比如尝试向 HashSet 添加重复值。
示例用法:
MyQueue<int> queue = new MyQueue<int>();
queue.Enqueue(5);
queue.Enqueue(17);
queue.Enqueue(28);
queue.Enqueue(17);
int firstNumber = queue.Dequeue();
queue.Enqueue(5);
queue.Enqueue(3);
List<int> queueContents = queue.ToList(); //this list should contain {17, 28, 3}
我在 MSDN 上四处寻找,但找不到这样的课程。它是否存在,或者我必须自己实现它?
我想我也可以使用不同的数据结构,但访问总是先进先出,所以我认为队列将是最有效的。此外,我不知道有任何其他结构提供这种“实例生命周期的唯一性”功能。
【问题讨论】:
-
我很确定你必须自己推出。
-
@Eugene OP 已经在问题中提到了 HashSet。
-
@Eugene 如果我从 HashSet 中删除一个元素,我可以稍后再添加它。我想要一个不允许我这样做的结构。就像具有内存和元素顺序的 HashSet。
-
请注意,要使其正常工作,您传入队列的任何类型都必须支持正确的相等比较(
.Equals(object)和.GetHashCode())
标签: c# data-structures queue