在朱莉娅构建按字典顺序排列的优先级队列

时间:2016-05-02 15:33:00

标签: julia

我正在尝试使用整数数组键创建一个优先级队列,浮点数组值按字典顺​​序排序。虽然我可以制作类型,但我无法构建对象。

PQ_type = Base.Collections.PriorityQueue{Vector{Int64}, Vector{Float64}, Base.Order.LexicographicOrdering}

成功创建了

类型

Base.Collections.PriorityQueue{Array{Int64,1},Array{Float64,1},Base.Order.LexicographicOrdering}

但是如果我按照我在v0.3中的方式尝试构造一个对象, PQ = Base.Collections.PriorityQueue{Vector{Int64}, Vector{Float64}, Base.Order.LexicographicOrdering}()

我得到了一个没有方法匹配错误的建议:

Closest candidates are: Base.Collections.PriorityQueue{K,V,O<:Base.Order.Ordering}(::Any, ::O<:Base.Order.Ordering) call{T}(::Type{T}, ::Any) convert{T}(::Type{T}, ::T) ... in call at essentials.jl:57

1)我如何构造这种类型(我不理解为什么优先级队列要求订购对象作为参数)

2)有没有办法构建这种类型的空优先级队列?

2 个答案:

答案 0 :(得分:1)

pq=Base.Collections.PriorityQueue(Int64,Int64,Base.Order.Lexicographic)

TBH,我刚刚查看the source并了解了这些SomethingOrder / Something符号,并认为您使用的Ordering后缀是额外的。

我会说有一个元/类型/函数关系,但不知道细节

答案 1 :(得分:1)

在v0.4.5上,这似乎有效:

pq = Base.Collections.PriorityQueue([1,2,3,4],[1.5,2.5,3.5,4.5],Base.Order.Lexicographic)
Base.Collections.PriorityQueue{Int64,Float64,Base.Order.LexicographicOrdering} with 4 entries:
  4 => 4.5
  2 => 2.5
  3 => 3.5
  1 => 1.5