#include <iostream>
#include <memory>
#include <queue>
int main ()
{
auto const less = [](std::unique_ptr<int> const& x, std::unique_ptr<int> const& y)
{
return x && y && (*x < *y);
};
using container = std::vector<std::unique_ptr<int>>;
std::priority_queue<std::unique_ptr<int>, container, decltype(less)> queue(less);
queue.push(std::make_unique<int>(24));
queue.push(std::make_unique<int>(42));
queue.push(std::make_unique<int>(11));
while (!queue.empty())
{
std::unique_ptr<int>& top = const_cast<std::unique_ptr<int>&>(queue.top());
std::unique_ptr<int> myInt = std::move(top);
queue.pop();
std::cout << *myInt << '\n';
}
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8bWVtb3J5PgojaW5jbHVkZSA8cXVldWU+CgppbnQgbWFpbiAoKQp7CglhdXRvIGNvbnN0IGxlc3MgPSBbXShzdGQ6OnVuaXF1ZV9wdHI8aW50PiBjb25zdCYgeCwgc3RkOjp1bmlxdWVfcHRyPGludD4gY29uc3QmIHkpCgl7CgkJcmV0dXJuIHggJiYgeSAmJiAoKnggPCAqeSk7Cgl9OwoJdXNpbmcgY29udGFpbmVyID0gc3RkOjp2ZWN0b3I8c3RkOjp1bmlxdWVfcHRyPGludD4+OwoJc3RkOjpwcmlvcml0eV9xdWV1ZTxzdGQ6OnVuaXF1ZV9wdHI8aW50PiwgY29udGFpbmVyLCBkZWNsdHlwZShsZXNzKT4gcXVldWUobGVzcyk7CgkKCXF1ZXVlLnB1c2goc3RkOjptYWtlX3VuaXF1ZTxpbnQ+KDI0KSk7CglxdWV1ZS5wdXNoKHN0ZDo6bWFrZV91bmlxdWU8aW50Pig0MikpOwoJcXVldWUucHVzaChzdGQ6Om1ha2VfdW5pcXVlPGludD4oMTEpKTsKCgl3aGlsZSAoIXF1ZXVlLmVtcHR5KCkpIAoJewoJCXN0ZDo6dW5pcXVlX3B0cjxpbnQ+JiB0b3AgPSBjb25zdF9jYXN0PHN0ZDo6dW5pcXVlX3B0cjxpbnQ+Jj4ocXVldWUudG9wKCkpOwoJCXN0ZDo6dW5pcXVlX3B0cjxpbnQ+IG15SW50ID0gc3RkOjptb3ZlKHRvcCk7CgkJcXVldWUucG9wKCk7CgkJc3RkOjpjb3V0IDw8ICpteUludCA8PCAnXG4nOwoJfQp9