// Example program
#include <iostream>
#include <queue>
class Foo
{
public:
Foo(int _a, int _b) : a{_a}, b{_b} {}
bool operator<(const Foo& other) const
{
return a < other.a || (a == other.a && b < other.b);
}
int GetA() const { return a; }
int GetB() const { return b; }
private:
int a;
int b;
};
int main()
{
std::priority_queue<Foo> x;
x.emplace(3,4);
x.emplace(4,1);
x.emplace(5,2);
x.emplace(2,7);
while (!x.empty())
{
Foo foo = x.top();
std::cout << "a: " << foo.GetA() << " b: " << foo.GetB() << std::endl;
x.pop();
}
}
Ly8gRXhhbXBsZSBwcm9ncmFtCiNpbmNsdWRlIDxpb3N0cmVhbT4KI2luY2x1ZGUgPHF1ZXVlPgoKY2xhc3MgRm9vCnsKcHVibGljOgogICAgRm9vKGludCBfYSwgaW50IF9iKSA6IGF7X2F9LCBie19ifSB7fQogICAgCiAgICBib29sIG9wZXJhdG9yPChjb25zdCBGb28mIG90aGVyKSBjb25zdAogICAgewogICAgICAgIHJldHVybiBhIDwgb3RoZXIuYSB8fCAoYSA9PSBvdGhlci5hICYmIGIgPCBvdGhlci5iKTsKICAgIH0KICAgIAogICAgaW50IEdldEEoKSBjb25zdCB7IHJldHVybiBhOyB9CiAgICBpbnQgR2V0QigpIGNvbnN0IHsgcmV0dXJuIGI7IH0KcHJpdmF0ZToKICAgIGludCBhOwogICAgaW50IGI7Cn07CgppbnQgbWFpbigpCnsKICAgIHN0ZDo6cHJpb3JpdHlfcXVldWU8Rm9vPiB4OwogICAgeC5lbXBsYWNlKDMsNCk7CiAgICB4LmVtcGxhY2UoNCwxKTsKICAgIHguZW1wbGFjZSg1LDIpOwogICAgeC5lbXBsYWNlKDIsNyk7CgogICAgd2hpbGUgKCF4LmVtcHR5KCkpCiAgICB7CiAgICAJRm9vIGZvbyA9IHgudG9wKCk7CiAgICAgICAgc3RkOjpjb3V0IDw8ICJhOiAiIDw8IGZvby5HZXRBKCkgPDwgIiBiOiAiIDw8IGZvby5HZXRCKCkgPDwgc3RkOjplbmRsOwogICAgICAgIHgucG9wKCk7CiAgICB9Cn0K