我有一个优先排队执行在C#我想添加一个。个方法。

然而,由于优先权的队列并不真正关心本身与订单的价值本身(即,如果我们只是抓住所有的价值观,无视他们的优先事项,他们不一定有任何顺序在所有),只有优先权的他们,我没有任何标准的一般T类型的优先权排队,那就是,我不要指定他们需要有一些固有的顺序,或者 可比性.

因此,当我来到实施 .IndexOf(T value) 我有一个小问题。

是否有一个标准在什么,/我应该如何实现这个吗?我的初步想法只是使用 EqualityComparer<T>.Default 图,如果我们发现的 value 或者没有,但是还有很多类似这样的类型,这些天。

例如,这里什么我想到了盖住我的基础,但是这似乎矫枉过正:

  • public Int32 IndexOf(T value) (境内的电话一个人有 ClassThatImplementsInterface.Default)
  • public Int32 IndexOf(T value, IComparer<T> comparer)
  • public Int32 IndexOf(T value, IEqualityComparer<T> comparer)
  • public Int32 IndexOf(T value, IEquatable<T> comparer)
  • public Int32 IndexOf(T value, Predicate<T> predicate)

你是做什么的?标志这既是主观的,维基,因为这更多的是一个民意调查,比其他任何东西。

在重新阅读我自己的问题我想我可能只使用一个没有一个比较器,然后添加所谓的版本,这种方式的用户的此类可以叫任何东西。

还注意到,我也可以做 pq[index] 抓住一个项目,其中包含的优先权和价值本身,因此我还可以得到通过,没有个在所有,但是我也有方法可说 改变优先权的价值X的优先P, 这将需要某种形式的个/搜索内部。因此我也想避免具有无数重载的所有这些方法。


应对评论:是的,队列的优先级是基于一堆。

基本上,这两类的定义是这样的:

public class Heap<T> : IEnumerable<T>, ICloneable { ... }
public class PriorityQueue<T> : Heap<PriorityQueueElement<T>> { ... }

PriorityQueueElement是一个简单的不可改变的结构与优先权和价值的性质。

应对即将进行的评论:由于优先权的队列是根据一堆,"有趣酒店",通过改变优先权的价值通过其指数之后,价值不一定是在那个索引。我打算仅仅是文件,这为在一些情况下,我预见到需要独立定位/变化的优先行动。

有帮助吗?

解决方案

我会做的比较一个构造可选择的参数;这是相媲美的东西怎么样 Dictionary<,>, SortedList<,> 等等,可以指定所比较的机制。

是否接受 IComparer<T>IEqualityComparer<T> 取决于你是否会对数据进行排序,或只是寻找一个平等相匹配;如果匹配,然后你需要的东西喜欢 IEqualityComparer<T>.不幸的是,由于这2种方法(GetHashCode()Equals())没有直接委托的版本的这个,也许除了 Predicate<T>Func<T,T,bool>.

为默认构造,我想通的 [Equality]Comparer<T>.Default.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top