在c#中使用有序集数据结构并使用ICompare对集合进行排序 特定值插入或有效添加工作,但在尝试获取集合中的最小值时会引发异常我的代码
class priorityqueue
{
public SortedSet<NODE> opendList;
private class SortAccordingToTotal : IComparer<NODE>
{
public int Compare(NODE a, NODE b)
{
return a.TOTAL.CompareTo(b.TOTAL);
}
}
public priorityqueue()
{
opendList = new SortedSet<NODE>(new SortAccordingToTotal());
}
public void Push (NODE N)
{
opendList.Add(N);
}
public bool search(NODE N)
{
return opendList.Contains(N);
}
public NODE POP()
{
NODE TEMP = new NODE();
TEMP = opendList.Min();
opendList.Remove(TEMP);
return TEMP;
}
}
答案 0 :(得分:2)
扩展@Claudiu Georgiu的评论,SortedSet
的{{3}}应该利用您的自定义比较器。但是,您当前可能使用的Min
property要求您的NODE
类实现IComparable<T>
或IComparable
接口。如果你切换到调用属性,它应该工作。
答案 1 :(得分:1)
你的问题很模糊,但听起来你的NODE类需要实现IComparable接口。幸运的是,这样做很容易。
public class NODE: IComparable
{
public int total{ get; set; }
public int CompareTo(object obj)
{
if (obj == null) return 1;
var otherNode = obj as Hobby;
return this.total.CompareTo(otherNode.total);
}
}