Thanks a lot..
On Monday, October 3, 2016 at 2:41:13 AM UTC+5:30, Steven G. Johnson wrote: > > > > 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. >