Использование Java PriorityQueue в Matlab - PullRequest
4 голосов
/ 28 марта 2011

Мне нужна минимальная куча в Matlab, и я пытаюсь использовать Java PriorityQueue. Я застрял на том, как поставить Компаратор. Пока что я инициализировал PriorityQueue и могу добавить к нему одну пару значение-индекс:

>> q = java.util.PriorityQueue
q =
[]
>> q.add({1,3})
ans =
     1

Проблема возникает, когда я пытаюсь добавить дополнительные данные:

>> q.add({2,4})
??? Java exception occurred: 
java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to java.lang.Comparable
    at java.util.PriorityQueue.siftUpComparable(Unknown Source)
    at java.util.PriorityQueue.siftUp(Unknown Source)
    at java.util.PriorityQueue.offer(Unknown Source)
    at java.util.PriorityQueue.add(Unknown Source)

Из этого сообщения я вижу, что мне нужно предоставить функцию Comparator, но я не знаю, как это сделать.

Ответы [ 2 ]

1 голос
/ 28 марта 2011

Приоритетные очереди должны содержать объекты, реализующие Comparable, или вам нужно передать функцию Comparator во время построения.

В настоящее время в MATLAB нет способа реализовать интерфейсы Java с кодом MATLAB или предоставить буквальный код Java.

Таким образом, вы должны будете следовать предложению @ nibot и создать небольшой файл .jar, содержащий класс, реализующий Comparator.

0 голосов
/ 06 декабря 2015
import java.util.*;

q = java.util.PriorityQueue();
for i=1:10
q.add(i);
end
disp(q)
[1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0]
...