#include <iostream>
#include <string>
#include <set>
using namespace std;
struct Item {
std::string data;
int priority;
};
struct item_compare
{
bool operator()(Item* lhs, Item* rhs)
{
return lhs->priority < rhs->priority;
}
};
int main() {
std::multiset<Item*, item_compare> item_set;
Item i1{"data1", 1};
Item i2{"data2", 0};
Item i3{"data3", 3};
Item i4{"data4", 0};
Item i5{"data5", 0};
item_set.insert(&i1);
item_set.insert(&i2);
item_set.insert(&i3);
item_set.insert(&i4);
item_set.insert(&i5);
for(auto item : item_set)
std::cout << item->data << '\n';
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8c2V0Pgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKc3RydWN0IEl0ZW0gewogICBzdGQ6OnN0cmluZyBkYXRhOwogICBpbnQgcHJpb3JpdHk7Cn07CgpzdHJ1Y3QgaXRlbV9jb21wYXJlCnsKCWJvb2wgb3BlcmF0b3IoKShJdGVtKiBsaHMsIEl0ZW0qIHJocykKCXsKCQlyZXR1cm4gbGhzLT5wcmlvcml0eSA8IHJocy0+cHJpb3JpdHk7Cgl9Cn07CgoKaW50IG1haW4oKSB7CglzdGQ6Om11bHRpc2V0PEl0ZW0qLCBpdGVtX2NvbXBhcmU+IGl0ZW1fc2V0OwoJSXRlbSBpMXsiZGF0YTEiLCAxfTsKICAgIEl0ZW0gaTJ7ImRhdGEyIiwgMH07CiAgICBJdGVtIGkzeyJkYXRhMyIsIDN9OwogICAgSXRlbSBpNHsiZGF0YTQiLCAwfTsKICAgIEl0ZW0gaTV7ImRhdGE1IiwgMH07CiAgICAKICAgIGl0ZW1fc2V0Lmluc2VydCgmaTEpOwogICAgaXRlbV9zZXQuaW5zZXJ0KCZpMik7CiAgICBpdGVtX3NldC5pbnNlcnQoJmkzKTsKICAgIGl0ZW1fc2V0Lmluc2VydCgmaTQpOwogICAgaXRlbV9zZXQuaW5zZXJ0KCZpNSk7CiAgICAKICAgIGZvcihhdXRvIGl0ZW0gOiBpdGVtX3NldCkKICAgICAgIHN0ZDo6Y291dCA8PCBpdGVtLT5kYXRhIDw8ICdcbic7CiAgICAKCXJldHVybiAwOwp9