#include <vector>
#include <map>
#include <string>
#include <iostream>
#include <stdexcept>
#include <sstream>
int main()
{
std::multimap<std::string, std::string> m;
std::string s = "1-1-2-1,1-1-3-1,1-2-3-4,2-3-4-5,2-3-5-8";
std::stringstream ss(s);
for(std::string item; std::getline(ss, item, ','); )
{
std::stringstream ss2(item);
std::vector<std::string> tokens;
for(std::string tok; std::getline(ss2, tok, '-'); )
tokens.push_back(tok);
if(tokens.size() != 4)
throw std::runtime_error("parsing error at item " + item);
std::string key = tokens[0] + '-' + tokens[1];
std::string value = tokens[2] + '-' + tokens[3];
m.insert(std::make_pair(key, value));
}
std::cout << "Key\tValue\n";
for(auto i = m.begin(); i!=m.end(); ++i)
std::cout << i->first << "\t" << i->second << '\n';
}
I2luY2x1ZGUgPHZlY3Rvcj4KI2luY2x1ZGUgPG1hcD4KI2luY2x1ZGUgPHN0cmluZz4KI2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RkZXhjZXB0PgojaW5jbHVkZSA8c3N0cmVhbT4KaW50IG1haW4oKQp7CiAgIHN0ZDo6bXVsdGltYXA8c3RkOjpzdHJpbmcsIHN0ZDo6c3RyaW5nPiBtOwogICBzdGQ6OnN0cmluZyBzID0gIjEtMS0yLTEsMS0xLTMtMSwxLTItMy00LDItMy00LTUsMi0zLTUtOCI7CiAgIHN0ZDo6c3RyaW5nc3RyZWFtIHNzKHMpOwogICBmb3Ioc3RkOjpzdHJpbmcgaXRlbTsgc3RkOjpnZXRsaW5lKHNzLCBpdGVtLCAnLCcpOyApCiAgIHsKICAgICAgIHN0ZDo6c3RyaW5nc3RyZWFtIHNzMihpdGVtKTsKICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiB0b2tlbnM7CiAgICAgICBmb3Ioc3RkOjpzdHJpbmcgdG9rOyBzdGQ6OmdldGxpbmUoc3MyLCB0b2ssICctJyk7ICkKICAgICAgICAgICB0b2tlbnMucHVzaF9iYWNrKHRvayk7CiAgICAgICBpZih0b2tlbnMuc2l6ZSgpICE9IDQpCiAgICAgICAgICAgICAgIHRocm93IHN0ZDo6cnVudGltZV9lcnJvcigicGFyc2luZyBlcnJvciBhdCBpdGVtICIgKyBpdGVtKTsKICAgICAgIHN0ZDo6c3RyaW5nIGtleSAgID0gdG9rZW5zWzBdICsgJy0nICsgdG9rZW5zWzFdOwogICAgICAgc3RkOjpzdHJpbmcgdmFsdWUgPSB0b2tlbnNbMl0gKyAnLScgKyB0b2tlbnNbM107CiAgICAgICBtLmluc2VydChzdGQ6Om1ha2VfcGFpcihrZXksIHZhbHVlKSk7CiAgIH0KICAgc3RkOjpjb3V0IDw8ICJLZXlcdFZhbHVlXG4iOwogICBmb3IoYXV0byBpID0gbS5iZWdpbigpOyBpIT1tLmVuZCgpOyArK2kpCiAgICAgICBzdGQ6OmNvdXQgPDwgaS0+Zmlyc3QgPDwgIlx0IiA8PCBpLT5zZWNvbmQgPDwgJ1xuJzsKfQo=