我是新来的工作与优先级队列和格式化此代码错误,我想让我的优先级是一个城市的直线距离,但我不相信我传递了这个信息正确的队列。查看API,我需要将SLD设置为比较器
[CNNVD]Public PriorityQueue PriorityQueue多个元素的排序问题(CNNVD-200605-045)Public PriorityQueue(int初始容量,比较器比较器)
创建具有指定初始容量的PriorityQueue,该容量根据指定的比较器对其元素进行排序。
但我不清楚。
public static void GreedySearchMap(map Romania) {
boolean done = false;
city current;
int numsteps = 10;
int cursteps;
int choice;
int numconnections;
int totaldist;
cursteps = 0;
current = Romania.Arad;
totaldist = 0;
/*create queue*/
PriorityQueue<city> q = new PriorityQueue<city>(city city,int SLD);
q.offer(current);
current.visited = true;
while (!done) {
System.out.printf("Step %d, In %s, Distance\t%d\n", cursteps,
current.getname(), totaldist);
if (current.getname() == "Bucharest")
done = true;
else {
current = q.poll();
cursteps++;
numconnections = current.getconnections();
for (int i = 0; i < numconnections; i++) {
choice = i;
if (current.getcity(choice).visited == false) {
//totaldist += current.getdist(choice);
q.offer(current.getcity(choice), current.getSLD());
current.visited = true;
}
}
}
}
System.out.printf("-----------------------\n");
}
我的错误是:
P:\csci395\hw4>javac GS.java
GS.java:85: error: method offer in class PriorityQueue<E> cannot be applied to g
iven types;
q.offer(current.
getcity(choice), current.getSLD());
^
required: city
found: city,int
reason: actual and formal argument lists differ in length
where E is a type-variable:
E extends Object declared in class PriorityQueue
1 error
首先,给类起一个大写的名字“城市”可能会生成编译器错误。其次,您的错误消息会告诉您出了什么问题。
你应该给你的PriorityQueue一个比较器。int甚至不是一个类对象,它是一种基本类型。查找Java比较器(java.lang.比较器)了解更多信息。
SLD不是比较器,它只是被比较的东西。您需要创建一个进行实际比较的类,并提交:
new Comparator<city>() {
@Override
public int compare(city city1, city city2) {
return city1.getSLD() - city2.getSLD();
}
};
阅读java。util。比较仪,以获得更多的了解。
不过,这只是一个错误。编译过程中出现的错误(如编译器输出中所述)是由于PriorityQueue的offer()方法使用了错误的参数。只应传递一个city
:SLD将由比较器实例的代码处理。
考虑下面的优先级类声明<代码>类优先级队列 我的想法: 我能想到的一件事是,这将强制优先级队列使用对象比较器,并且不会提供实现其自定义比较器的能力,因为类的用户可能希望基于某个不同的比较器构建队列。
注意:我知道可以用比较器创建优先级队列,然后重复调用Add。
优先级队列(Priority Queue) 注:队列是一种特征为FIFO的数据结构,每次从队列中取出的是最早加入队列中的元素。但是,许多应用需要另一种队列,每次从队列中取出的应是具有最高优先权的元素,这种队列就是优先级队列(Priority Queue),也称为优先权队列。 1. 优先级队列的概念 1.1 优先级队列的定义 优先级队列是不同于先进先出队列的另一种队列。每次从队列中取出的是具有最高优
我需要一个优先级队列,它首先获得具有最高优先级值的项目。我当前正在使用队列库中的PriorityQueue类。但是,这个函数只先返回值最小的项。我尝试了一些很难看的解决方案,比如(sys.maxint-priority)作为优先级,但我只是想知道是否存在更优雅的解决方案。
我在模拟中使用下面的代码。因为我一遍又一遍地调用dijkstra方法,性能对我来说非常关键。,我使用PriorityQueue将图的节点保持相对于它们到源的距离的升序。PriorityQueue为我提供了以O(log n)复杂度访问距离最小的节点。但是,要在重新计算节点距离后保持节点有序,我需要首先删除节点,而不是再次添加它。我想可能有更好的方法。我感谢任何反馈。提前感谢所有社区。
我正在编写一个最小优先级队列和一个最大优先级队列,如下所示: 输入数组的数字将一个接一个地添加到队列中。然而,当数组[12,4,5,3,8,7]是一个样本输入,打印优先队列的输出是: MIN:[3.0, 4.0, 5.0, 12.0, 8.0, 7.0]MAX:[12.0, 8.0, 7.0, 3.0, 4.0, 5.0] 我定义的比较器有什么问题吗?提前感谢你的帮助。