Я сейчас изучаю книгу ускоренного C ++ (Кениг / Му) и у меня возникли проблемы с одним из упражнений.Проблема состоит в том, чтобы написать программу, которая принимает в качестве входных данных некоторую последовательность слов, которую затем сохраняет на карте.Строки - это введенные слова, а связанное с ними int - количество раз, которое встречается каждое слово.Затем вам нужно отсортировать слова по количеству раз, когда они встречаются;то есть по значению, а не по ключу.Вы не можете отсортировать карту по значению, поэтому я попытался скопировать элементы в вектор, который я собирался отсортировать, используя предикат.К сожалению, все, что я получаю, это экран, полный ошибок от g ++.Кажется, они происходят из одного и того же места - помещая элементы моей карты в вектор, что я пытаюсь сделать так:
int main()
{
map<string, int> counters;
cout << "Enter some words followed by end-of-file (ctrl-d): ";
string word;
while (cin >> word)
++counters[word];
//maps cannot be sorted by values, so pass the elements of counters to a vector
vector<map<string, int> > vec_counters;
map<string, int>::const_iterator it = counters.begin();
while (it != counters.end()) {
vec_counters.push_back(*it);
++it;
}
Это, очевидно, только первая часть, но я не могу получитьдаже это для компиляции.Я получаю сообщение об ошибке:
32: 31: ошибка: нет соответствующей функции для вызова std :: vector, int>> :: push_back (const std :: pair, int> &) '/ usr / include/c++/4.5/bits/stl_vector.h:741:7: примечание: кандидат: void std :: vector <_Tp, _Alloc> :: push_back (const value_type &) [with _Tp = std :: map, int>, _Alloc= std :: allocator, int>>, value_type = std :: map, int>]
Полагаю, я делаю что-то принципиально глупое ... но я не могу за всю жизнь понять, что..
Любая помощь будет отличной!
C