- #include <map> 
- #include <vector> 
- #include <sstream> 
- #include <string> 
- #include <algorithm> 
- #include <iterator> 
- #include <iostream> 
-   
- using namespace std; 
-   
- typedef std::map<std::string, std::vector<int> > StringMap; 
-   
- void AddToMap(StringMap& sMap, const std::string& line) 
- { 
- 	istringstream strm(line); 
- 	string name; 
- 	strm >> name; 
- 	StringMap::iterator it = sMap.insert(make_pair(name, std::vector<int>())).first; 
- 	int num; 
- 	while (strm >> num) 
- 		it->second.push_back(num); 
- } 
-   
- int main() 
- { 
- 	vector<std::string> data = { "Adam 2 5 1 5 3 4", "John 1 4 2 5 22 7", "Kate 7 3 4 2 1 15", "Bill 2222 2 22 11 111" }; 
- 	StringMap vectMap; 
-   
- 	// Add results to map 
- 	for_each(data.begin(), data.end(), [&](const std::string& s){AddToMap(vectMap, s); }); 
-   
- 	// Output the results 
- 	for_each(vectMap.begin(), vectMap.end(), 
- 		[](const StringMap::value_type& vt) 
- 	{cout << vt.first << " "; copy(vt.second.begin(), vt.second.end(), ostream_iterator<int>(cout, " ")); cout << "\n"; }); 
- } 
-   
				I2luY2x1ZGUgPG1hcD4KI2luY2x1ZGUgPHZlY3Rvcj4KI2luY2x1ZGUgPHNzdHJlYW0+CiNpbmNsdWRlIDxzdHJpbmc+CiNpbmNsdWRlIDxhbGdvcml0aG0+CiNpbmNsdWRlIDxpdGVyYXRvcj4KI2luY2x1ZGUgPGlvc3RyZWFtPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnR5cGVkZWYgc3RkOjptYXA8c3RkOjpzdHJpbmcsIHN0ZDo6dmVjdG9yPGludD4gPiBTdHJpbmdNYXA7Cgp2b2lkIEFkZFRvTWFwKFN0cmluZ01hcCYgc01hcCwgY29uc3Qgc3RkOjpzdHJpbmcmIGxpbmUpCnsKCWlzdHJpbmdzdHJlYW0gc3RybShsaW5lKTsKCXN0cmluZyBuYW1lOwoJc3RybSA+PiBuYW1lOwoJU3RyaW5nTWFwOjppdGVyYXRvciBpdCA9IHNNYXAuaW5zZXJ0KG1ha2VfcGFpcihuYW1lLCBzdGQ6OnZlY3RvcjxpbnQ+KCkpKS5maXJzdDsKCWludCBudW07Cgl3aGlsZSAoc3RybSA+PiBudW0pCgkJaXQtPnNlY29uZC5wdXNoX2JhY2sobnVtKTsKfQoKaW50IG1haW4oKQp7Cgl2ZWN0b3I8c3RkOjpzdHJpbmc+IGRhdGEgPSB7ICJBZGFtIDIgNSAxIDUgMyA0IiwgIkpvaG4gMSA0IDIgNSAyMiA3IiwgIkthdGUgNyAzIDQgMiAxIDE1IiwgIkJpbGwgMjIyMiAyIDIyIDExIDExMSIgfTsKCVN0cmluZ01hcCB2ZWN0TWFwOwoKCS8vIEFkZCByZXN1bHRzIHRvIG1hcAoJZm9yX2VhY2goZGF0YS5iZWdpbigpLCBkYXRhLmVuZCgpLCBbJl0oY29uc3Qgc3RkOjpzdHJpbmcmIHMpe0FkZFRvTWFwKHZlY3RNYXAsIHMpOyB9KTsKCgkvLyBPdXRwdXQgdGhlIHJlc3VsdHMKCWZvcl9lYWNoKHZlY3RNYXAuYmVnaW4oKSwgdmVjdE1hcC5lbmQoKSwKCQlbXShjb25zdCBTdHJpbmdNYXA6OnZhbHVlX3R5cGUmIHZ0KQoJe2NvdXQgPDwgdnQuZmlyc3QgPDwgIiAiOyBjb3B5KHZ0LnNlY29uZC5iZWdpbigpLCB2dC5zZWNvbmQuZW5kKCksIG9zdHJlYW1faXRlcmF0b3I8aW50Pihjb3V0LCAiICIpKTsgY291dCA8PCAiXG4iOyB9KTsKfQo=