Can someone help me understand why this doesn't work and how can make it work?
PriorityQueue<Candidate, int> pq =
new PriorityQueue<Candidate, int>(new EstimateCompare());
public class EstimateCompare: IComparer<Candidate>
{
public int Compare(Candidate a, Candidate b)
{
int diff = a.estimateDistance -b.estimateDistance;
return diff == 0 ? 0 : diff < 0 ? 1 : -1;
}
}
Here is the error I get:
CS0535: 'EstimateCompare' does not implement interface member 'IComparer.Compare(int, int)' (in Solution.cs)
Tried using it like this and I get this error:
PriorityQueue<Candidate, int> pq =
new PriorityQueue<Candidate, int>(new EstimateCompare());
public class EstimateCompare: IComparer<Candidate> {
public int Compare(Candidate a, Candidate b) {
return a.estimateDistance.CompareTo(b.estimateDistance);
}
error CS1503: Argument 1: cannot convert from 'EstimateCompare' to 'System.Collections.Generic.IComparer?'
public class Candidate { int row; int col; int distanceSoFar; public int estimateDistance; public Candidate(int row, int col, int distanceSoFar, int estimateDistance) { this.row = row; this.col = col; this.distanceSoFar = distanceSoFar; this.estimateDistance = estimateDistance; } }
Many Thanks!!