I found a solution that I would like to share, given an input heap (minhp) and a value that I want to look for (node):

function searchhp(minhp,node)
#this function tests if a node is contained in a heap
b=extract_all!(minhp)
c=first.(b)
d=node in b
minhp=MutableBinaryHeap(Base.By(last),b)
return d,minhp
end

Basically, what this is doing is turning the heap into a tuple, searching the value, and then transforming back the tuple into the heap.

I worries me that going back and forth from tuple to heap may be computationally expensive for big heaps, but is the only solution that I could find.

If anyone has any idea on a better way to test if a value is contained in a MutableBinaryHeap, I would really appreciate it.

First, you could have posted in that same thread, instead of creating a new one.

Second, if you often need to check if a heap contain a value, then a heap is probably not the most adequate data structure, I recommend using another one, like an OrderedDict or my own TrackingHeap (see the fourth point below).

Third, yes, this is horrendous for performance, I really do not recommend doing it. At this point you would be better with a simple unordered Vector and searching it with findmin and findfirst. You should also not be creating a b just to use in, use findfirst(x -> first(x) == node, b) !== nothing instead.

Fourth, if you need to use a heap, I recommend my own competing solution TrackingHeaps.jl. It conforms to the Dict interface, and using it you could just do findfirst(x -> first(x) == node, values(minhp)) !== nothing to do a linear search without any performance penalty (values does not copy, so you are just directly accessing the Vector with the values).