On Saturday, October 1, 2016 at 1:17:48 PM UTC-4, Athul George Appadan wrote: > > I am trying to find a way to check the membership of a user defined type > object in a heap. This is the code I have written: > > type HeapEntry > k::Int > dist::Float64 > end > > isless(e1::HeapEntry, e2::HeapEntry) = e1.dist < e2.dist > > heap1 = [] > Collection.heappush!(heap1, HeapEntry(1, 10.0)) > > > But HeapEntry(1, 10.0) is returning false. Can anyone explain how to do it > correctly? >
== defaults to object equality, so HeapEntry(1, 10.0) == HeapEntry(1, 10.0) returns false unless you define your own == operation. However, I'm guessing that in this case you want to define an immutable type, rather than a mutable type. Not only will storage etc be more efficient, but also the default == will do what you want in that case. immutable HeapEntry k::Int dist::Float64 end Base.isless(e1::HeapEntry, e2::HeapEntry) = e1.dist < e2.dist heap1 = HeapEntry[] Collections.heappush!(heap1, HeapEntry(1, 10.0)) At that point, HeapEntry(1, 10.0) in heap1 returns true. However, note that a heap data structure is not designed for fast membership testing. It is designed for quickly popping the minimum element. If you want "x in data" operations to be fast, you should use some other data structure.