use stl priority queue