#include <iostream>
#include <regex>
#include <map>
typedef std:: pair < std:: string ,int > PairType;
int main( ) {
try {
std:: string Text =
"Хотелось бы конкретных примеров.\n " \
"Типа таких \" вот человек решал эту задачу (описание задачи) на СИ полгода." \
"Я сделал её на С++ на неделю\" " ;
std:: regex Regex( "([\\ s,\\ .=\\ (\\ )\\ \" +-]+)" ) ;
std:: sregex_token_iterator Begin( Text.begin ( ) ,Text.end ( ) , Regex, - 1 ) ;
std:: sregex_token_iterator End;
std:: map < std:: string ,int > Map;
std:: vector < PairType> P;
while ( Begin ! = End) Map[ * ( Begin++ ) ] ++ ;
for ( const auto & i: Map) P.push_back ( std:: make_pair ( i.first ,i.second ) ) ;
std:: sort ( P.begin ( ) ,P.end ( ) ,[ ] ( const PairType & i, const PairType & j) {
if ( i.second == j.second ) return i.first < j.first ;
return i.second > j.second ;
}
) ;
for ( const auto & i: P) std:: cout << i.first << " : " << i.second << std:: endl ;
} catch ( ...) {
std:: cout << "Нарвались на засаду!" << std:: endl ;
}
return 0 ;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8cmVnZXg+CiNpbmNsdWRlIDxtYXA+Cgp0eXBlZGVmIHN0ZDo6cGFpcjxzdGQ6OnN0cmluZyxpbnQ+IFBhaXJUeXBlOwoKaW50IG1haW4oKSB7CiAgdHJ5IHsJCiAgICBzdGQ6OnN0cmluZyBUZXh0ID0KICAgIAogICAgICAi0KXQvtGC0LXQu9C+0YHRjCDQsdGLINC60L7QvdC60YDQtdGC0L3Ri9GFINC/0YDQuNC80LXRgNC+0LIuXG4iIFwKICAgICAgItCi0LjQv9CwINGC0LDQutC40YUgXCLQstC+0YIg0YfQtdC70L7QstC10Log0YDQtdGI0LDQuyDRjdGC0YMg0LfQsNC00LDRh9GDICjQvtC/0LjRgdCw0L3QuNC1INC30LDQtNCw0YfQuCkg0L3QsCDQodCYINC/0L7Qu9Cz0L7QtNCwLiIgXAogICAgICAi0K8g0YHQtNC10LvQsNC7INC10ZEg0L3QsCDQoSsrINC90LAg0L3QtdC00LXQu9GOXCIiOwogICAgICAKICAgIHN0ZDo6cmVnZXggUmVnZXgoIihbXFxzLFxcLj1cXChcXClcXFwiKy1dKykiKTsKICAgIHN0ZDo6c3JlZ2V4X3Rva2VuX2l0ZXJhdG9yIEJlZ2luKFRleHQuYmVnaW4oKSxUZXh0LmVuZCgpLCBSZWdleCwgLTEpOwogICAgc3RkOjpzcmVnZXhfdG9rZW5faXRlcmF0b3IgRW5kOwogICAgc3RkOjptYXA8c3RkOjpzdHJpbmcsaW50PiBNYXA7CiAgICBzdGQ6OnZlY3RvcjxQYWlyVHlwZT4gUDsKICAgIHdoaWxlIChCZWdpbiAhPSBFbmQpIE1hcFsqKEJlZ2luKyspXSsrOwogICAgZm9yKGNvbnN0IGF1dG8gJmk6TWFwKSBQLnB1c2hfYmFjayhzdGQ6Om1ha2VfcGFpcihpLmZpcnN0LGkuc2Vjb25kKSk7CiAgICBzdGQ6OnNvcnQoUC5iZWdpbigpLFAuZW5kKCksW10oY29uc3QgUGFpclR5cGUgJmksIGNvbnN0IFBhaXJUeXBlICZqKSB7IAogICAgICBpZiAoaS5zZWNvbmQgPT0gai5zZWNvbmQpIHJldHVybiBpLmZpcnN0IDwgai5maXJzdDsKICAgICAgcmV0dXJuIGkuc2Vjb25kID4gai5zZWNvbmQ7CiAgICAgIH0KICAgICk7CiAgICBmb3IoY29uc3QgYXV0byAmaTpQKSBzdGQ6OmNvdXQgPDwgaS5maXJzdCA8PCAiIDogIiA8PCBpLnNlY29uZCA8PCBzdGQ6OmVuZGw7CiAgfSBjYXRjaCguLi4pIHsKICAJc3RkOjpjb3V0IDw8ICLQndCw0YDQstCw0LvQuNGB0Ywg0L3QsCDQt9Cw0YHQsNC00YMhIiA8PCBzdGQ6OmVuZGw7CiAgfQogIHJldHVybiAwOwp9