#include <iostream>
#include <map>
#include <iostream> // std::cout
#include <iterator> // std::next
#include <list> // std::list
#include <algorithm> // std::for_each
#include <limits.h>
using namespace std;
int main() {
multimap<int, string, greater<int> > m; //instead of multimap<int, string > m;
m.insert(make_pair(95, "Foo"));
m.insert(make_pair(95, "Bar"));
m.insert(make_pair(95, "Ball"));
m.insert(make_pair(93, "Abacus"));
m.insert(make_pair(92, "Sober"));
m.insert(make_pair(93, "Globe"));
m.insert(make_pair(93, "Hello"));
m.insert(make_pair(93, "Ameen"));
//for(auto it : m)
multimap<int, string, greater<int> >:: iterator it = m.begin(), st, ed;
vector<string> vec;
bool sameKey = true;
int lastKey = INT_MAX;
while(it != m.end())
{
//cout << it->first << " : " << it->second <<endl;
//pair<int, string> temp = *it;
if(it->first < lastKey)
{
sort(vec.begin(), vec.end());
for(int i = 0; i < vec.size(); i++){
st->second = vec[i];
st++;
}
st = it;
vec.clear();
}
vec.push_back(it->second);
lastKey = it->first;
it++;
}
sort(vec.begin(), vec.end());
for(int i = 0; i < vec.size(); i++){
st->second = vec[i];
st++;
}
it = m.begin();
while(it != m.end())
{
cout << it->first << " : " << it->second <<endl;
it++;
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8bWFwPgojaW5jbHVkZSA8aW9zdHJlYW0+ICAgICAvLyBzdGQ6OmNvdXQKI2luY2x1ZGUgPGl0ZXJhdG9yPiAgICAgLy8gc3RkOjpuZXh0CiNpbmNsdWRlIDxsaXN0PiAgICAgICAgIC8vIHN0ZDo6bGlzdAojaW5jbHVkZSA8YWxnb3JpdGhtPiAgICAvLyBzdGQ6OmZvcl9lYWNoCiNpbmNsdWRlIDxsaW1pdHMuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmludCBtYWluKCkgewoJbXVsdGltYXA8aW50LCBzdHJpbmcsIGdyZWF0ZXI8aW50PiA+IG07ICAvL2luc3RlYWQgb2YgbXVsdGltYXA8aW50LCBzdHJpbmcgPiBtOwoJbS5pbnNlcnQobWFrZV9wYWlyKDk1LCAiRm9vIikpOwoJbS5pbnNlcnQobWFrZV9wYWlyKDk1LCAiQmFyIikpOwogICAgbS5pbnNlcnQobWFrZV9wYWlyKDk1LCAiQmFsbCIpKTsKCW0uaW5zZXJ0KG1ha2VfcGFpcig5MywgIkFiYWN1cyIpKTsKCW0uaW5zZXJ0KG1ha2VfcGFpcig5MiwgIlNvYmVyIikpOwoJbS5pbnNlcnQobWFrZV9wYWlyKDkzLCAiR2xvYmUiKSk7CgltLmluc2VydChtYWtlX3BhaXIoOTMsICJIZWxsbyIpKTsKCW0uaW5zZXJ0KG1ha2VfcGFpcig5MywgIkFtZWVuIikpOwoJLy9mb3IoYXV0byBpdCA6IG0pCgltdWx0aW1hcDxpbnQsIHN0cmluZywgZ3JlYXRlcjxpbnQ+ID46OiBpdGVyYXRvciBpdCA9IG0uYmVnaW4oKSwgc3QsIGVkOwoJdmVjdG9yPHN0cmluZz4gdmVjOwoJYm9vbCBzYW1lS2V5ID0gdHJ1ZTsKCWludCBsYXN0S2V5ID0gSU5UX01BWDsKCXdoaWxlKGl0ICE9IG0uZW5kKCkpCgl7CgkJLy9jb3V0IDw8IGl0LT5maXJzdCA8PCAiIDogIiA8PCBpdC0+c2Vjb25kIDw8ZW5kbDsKCQkvL3BhaXI8aW50LCBzdHJpbmc+IHRlbXAgPSAqaXQ7CgkJaWYoaXQtPmZpcnN0IDwgbGFzdEtleSkKCQl7CgkJc29ydCh2ZWMuYmVnaW4oKSwgdmVjLmVuZCgpKTsKCQkJZm9yKGludCBpID0gMDsgaSA8IHZlYy5zaXplKCk7IGkrKyl7CgkJCQlzdC0+c2Vjb25kID0gdmVjW2ldOwoJCQkJc3QrKzsKCQkJfQoJCQlzdCA9IGl0OwoJCQl2ZWMuY2xlYXIoKTsKCQl9CgkJdmVjLnB1c2hfYmFjayhpdC0+c2Vjb25kKTsKCQlsYXN0S2V5ID0gaXQtPmZpcnN0OwoJCWl0Kys7Cgl9Cglzb3J0KHZlYy5iZWdpbigpLCB2ZWMuZW5kKCkpOwoJZm9yKGludCBpID0gMDsgaSA8IHZlYy5zaXplKCk7IGkrKyl7CgkJc3QtPnNlY29uZCA9IHZlY1tpXTsKCQlzdCsrOwoJfQoJaXQgPSBtLmJlZ2luKCk7Cgl3aGlsZShpdCAhPSBtLmVuZCgpKQoJewoJCWNvdXQgPDwgaXQtPmZpcnN0IDw8ICIgOiAiIDw8IGl0LT5zZWNvbmQgPDxlbmRsOwoJCWl0Kys7Cgl9CgoJcmV0dXJuIDA7Cn0=