#include <queue>
#include <vector>
#include <functional>
using namespace std;
template<typename Pair>
struct GreaterBySecond {
bool operator()(Pair a, Pair b) const {
return a.second > b.second;
}
};
int main(){
typedef pair<int,float> ifpair;
GreaterBySecond<ifpair> comp;
typedef priority_queue< ifpair , vector<ifpair>, decltype( comp ) > t_npq;
t_npq npq( comp );
//do something with npq. finish using it (without emptying it) and clear for next round
t_npq empty( comp );
swap(npq , empty);
}
I2luY2x1ZGUgPHF1ZXVlPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8ZnVuY3Rpb25hbD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnRlbXBsYXRlPHR5cGVuYW1lIFBhaXI+CnN0cnVjdCBHcmVhdGVyQnlTZWNvbmQgewoJYm9vbCBvcGVyYXRvcigpKFBhaXIgYSwgUGFpciBiKSBjb25zdCB7CgkJcmV0dXJuIGEuc2Vjb25kID4gYi5zZWNvbmQ7Cgl9Cn07CgppbnQgbWFpbigpewogICAgdHlwZWRlZiBwYWlyPGludCxmbG9hdD4gaWZwYWlyOwogICAgR3JlYXRlckJ5U2Vjb25kPGlmcGFpcj4gY29tcDsKICAgIHR5cGVkZWYgcHJpb3JpdHlfcXVldWU8IGlmcGFpciAsIHZlY3RvcjxpZnBhaXI+LCBkZWNsdHlwZSggY29tcCApID4gdF9ucHE7CiAgICB0X25wcSBucHEoIGNvbXAgKTsKICAgIC8vZG8gc29tZXRoaW5nIHdpdGggbnBxLiBmaW5pc2ggdXNpbmcgaXQgKHdpdGhvdXQgZW1wdHlpbmcgaXQpIGFuZCBjbGVhciBmb3IgbmV4dCByb3VuZAogICAgdF9ucHEgZW1wdHkoIGNvbXAgKTsKICAgIHN3YXAobnBxICwgZW1wdHkpOwp9Cg==