#include <bits/stdc++.h>
using namespace std;
class Comp
{
public:
bool operator()(const pair<int, int> &a, const pair<int, int> &b)
{
cout << "Custom comparator called" << endl;
return a.second > b.second;
}
};
template<typename T>
class custom_priority_queue_MinHeap : public std::priority_queue<T, std::vector<T>, Comp>
{
public:
bool remove(const T& value)
{
auto it = std::find(this->c.begin(), this->c.end(), value);
if (it != this->c.end())
{
this->c.erase(it);
std::make_heap(this->c.begin(), this->c.end(), this->comp);
return true;
}
return false;
}
bool operator()(const pair<int, int> &a, const pair<int, int> &b)
{
cout << "Custom comparator called" << endl;
return a.second > b.second;
}
};
int main() {
custom_priority_queue_MinHeap<pair<int, int>> minHeap;
minHeap.push({0, 10});
minHeap.push({1, 5});
minHeap.push({2, 15});
while(!minHeap.empty())
{
pair<int, int> p = minHeap.top();
minHeap.pop();
cout << p.first << " " << p.second << endl;
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgpjbGFzcyBDb21wCnsKcHVibGljOgoJYm9vbCBvcGVyYXRvcigpKGNvbnN0IHBhaXI8aW50LCBpbnQ+ICZhLCBjb25zdCBwYWlyPGludCwgaW50PiAmYikKICAgIHsKICAgICAgICBjb3V0IDw8ICJDdXN0b20gY29tcGFyYXRvciBjYWxsZWQiIDw8IGVuZGw7CiAgICAgICAgcmV0dXJuIGEuc2Vjb25kID4gYi5zZWNvbmQ7CiAgICB9Cn07Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBUPgpjbGFzcyBjdXN0b21fcHJpb3JpdHlfcXVldWVfTWluSGVhcCA6IHB1YmxpYyBzdGQ6OnByaW9yaXR5X3F1ZXVlPFQsIHN0ZDo6dmVjdG9yPFQ+LCBDb21wPgp7CiAgcHVibGljOgogICAgICBib29sIHJlbW92ZShjb25zdCBUJiB2YWx1ZSkgCiAgICAgIHsKICAgICAgICBhdXRvIGl0ID0gc3RkOjpmaW5kKHRoaXMtPmMuYmVnaW4oKSwgdGhpcy0+Yy5lbmQoKSwgdmFsdWUpOwogICAgICAgIGlmIChpdCAhPSB0aGlzLT5jLmVuZCgpKQogICAgICAgIHsKICAgICAgICAgICAgdGhpcy0+Yy5lcmFzZShpdCk7CiAgICAgICAgICAgIHN0ZDo6bWFrZV9oZWFwKHRoaXMtPmMuYmVnaW4oKSwgdGhpcy0+Yy5lbmQoKSwgdGhpcy0+Y29tcCk7CiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgIAogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIAogICAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IHBhaXI8aW50LCBpbnQ+ICZhLCBjb25zdCBwYWlyPGludCwgaW50PiAmYikKICAgIHsKICAgICAgICBjb3V0IDw8ICJDdXN0b20gY29tcGFyYXRvciBjYWxsZWQiIDw8IGVuZGw7CiAgICAgICAgcmV0dXJuIGEuc2Vjb25kID4gYi5zZWNvbmQ7CiAgICB9Cn07CgppbnQgbWFpbigpIHsKCWN1c3RvbV9wcmlvcml0eV9xdWV1ZV9NaW5IZWFwPHBhaXI8aW50LCBpbnQ+PiBtaW5IZWFwOwoJbWluSGVhcC5wdXNoKHswLCAxMH0pOwoJbWluSGVhcC5wdXNoKHsxLCA1fSk7CgltaW5IZWFwLnB1c2goezIsIDE1fSk7CgkKCXdoaWxlKCFtaW5IZWFwLmVtcHR5KCkpCgl7CgkJcGFpcjxpbnQsIGludD4gcCA9IG1pbkhlYXAudG9wKCk7CgkJbWluSGVhcC5wb3AoKTsKCQljb3V0IDw8IHAuZmlyc3QgPDwgIiAiIDw8IHAuc2Vjb25kIDw8IGVuZGw7Cgl9CgkKCXJldHVybiAwOwp9