Следующий код вводит слова и подсчитывает, сколько раз каждое слово появилось во входных данных. Затем программа печатает каждое слово и соответствующую частоту в порядке от наименьшего к наибольшему.
#include <iostream>
#include <map>
#include <vector>
#include <string>
using namespace std;
int main()
{
string s;
map<string, int> counters;
map<int, vector<string> > freq;
while (cin >> s)
++counters[s];
map<string, int>::const_iterator it = counters.begin();
for (it; it != counters.end(); ++it)
{
freq[it->second].push_back(it->first);
}
for (map<int, vector<string> >::const_iterator i = freq.begin();
i != freq.end(); ++i)
{
vector<string>::const_iterator j = i->second.begin();
cout << i->first << '\t' << *j;
while (j != i->second.end())
{
++j;
cout << ", " << *j;
}
cout << endl;
}
return 0;
}
Программа компилируется и запускается, но всякий раз, когда я ввожу все нужные мне слова и ввожу EOF, появляется следующая ошибка времени выполнения
Выражение: векторный итератор не может быть разыменован
и тогда также появляется следующая ошибка
Стандартные библиотеки C++ вне допустимого диапазона && 0
Как это решить?