Пытаясь создать программу, которая читает .txt-файл, отображает его, подсчитывает уникальные слова и отображает уникальные слова рядом с тем, сколько раз использовалось. C ++

Я пытаюсь создать программу, которая читает .txt-файл, отображает его, подсчитывает уникальные слова и отображает уникальные слова рядом с тем, сколько раз использовалось. Пока у меня есть количество уникальных слов и уникальных слов. Я немного зациклился на том, как подсчитать количество раз, когда использовалось каждое слово, а не просто общее количество уникальных слов. Как мне отобразить текст из файла? Мой текущий оператор печати печатает слово количество раз, когда оно появляется, и я хочу изменить его на что-то вроде этого: «как: 6» и т. Д. … в алфавитном порядке. Любые предложения или помощь будут оценены.

#include  #include  #include  #include  #include  #include  #include  using namespace std; string ask(string msg) { string ans; cout << msg; getline(cin, ans); return ans; } int main() { ifstream fin( ask("Enter file name: ").c_str()); //open an input stream on the given file if( fin.fail() ) { cerr << "An error occurred trying to open the file!\n"; return 1; } istream_iterator it{fin}; set uniques; transform(it, {}, inserter(uniques, uniques.begin()), [](string str) // make it lower case, so case doesn't matter anymore { transform(str.begin(), str.end(), str.begin(), ::tolower); return str; }); cout << "" << endl; cout << "There are " << uniques.size() << " unique words in the above text." << endl; cout << "----------------------------------------------------------------" << endl; cout << " " << endl; // display the unique elements for(auto&& elem: uniques) for (int i=0; i < uniques.size(); i++) cout << " " << elem << endl; // display the size: cout << std::endl << uniques.size(); return 0; } 

Чтобы подсчитать слова, используйте map

 map mapObj; string strObj = "something"; mapObj[strObj] = mapObj[strObj] + 1 

Чтобы отобразить как слово, так и счетный номер

 for (auto & elem : mapObj) { cout << elem.first << ": " << elem.second << endl; } 

EDIT: Как предложил PaulMcKenzie, mapObj[strObj]++ намного проще.