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.
>

Reply via email to