在使用 lambda ex<Pair> 比较 C# 中优先级队列中的两个对象时,出现错误无法将 Generic.Comparer<int> 转换为 Generic.IComparer

问题描述 投票:0回答:1

我有双人班。

public class Pair
{
    public int freq;
    public int coolTime;
    
    public Pair(int freq, int coolTime)
    {
        this.freq = freq;
        this.coolTime = coolTime;
    }
}

我想创建一个带有自定义比较器的优先级队列,使其成为最大堆。我正在尝试使用 lambda 来做到这一点。我不明白问题出在哪里。这是我尝试过的事情。

 var pq = new PriorityQueue<Pair, int>(Comparer<Pair>.Create((x, y) => y.freq.CompareTo(x.freq)));

我知道我犯了一些愚蠢的错误,但我不确定它是什么。任何帮助将不胜感激。

编辑:这是我在编译时遇到的错误。

c# lambda priority-queue icomparer
1个回答
0
投票

PriorityQueue<TElement, TPriority>
的比较器比较优先级,而不是元素。这就是错误消息告诉您的内容。

更改代码以比较优先级,如下所示:

var pq = new PriorityQueue<Pair, int>(Comparer<int>.Create((x, y) => y.CompareTo(x)));

优先级队列文档

© www.soinside.com 2019 - 2024. All rights reserved.