- #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