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