Я пытаюсь написать программу, которая будет принимать список строк в качестве входных данных и создавать хеш-таблицу с именем строки и ее позицией.C++ unordered_map insert в вектор
Пример:
векторные слова {"первый", "второй", "третий", "четвертый", "второй"};
выход:
первая 1
второй 2,5
третий 3
вперед 4
я столкнулся с двумя проблемами, пожалуйста, найти их в коде комментарии ниже.
Пожалуйста, скажите мне, что я делаю неправильно?
int main()
{
vector<string> words {"first", "second", "third", "forth", "second"};
unordered_map<string, vector<int>> hash_table;
unordered_map<string, vector<int>>::const_iterator hash_it;
int loc = 1;
for(auto n = words.begin(); n != words.end(); ++n){
hash_it = hash_table.find(*n);
if(hash_it == hash_table.end())
hash_table.insert(make_pair(*n, vector<int> (loc)));
else
//hash_it->second.push_back(loc); //Problem 1 - this statement gives error
++loc;
}
for(auto& n:hash_table){
cout<<"Word - "<<n.first<<" Loc -";
vector<int> tmp1 = n.second;
for(auto j = tmp1.begin(); j != tmp1.end(); ++j)
cout<<" "<<*j;
cout<<endl;
}
}
Проблема 2 - значения местоположения равны 0
Выход программы -
Слово - вперед Лок - 0
Слово - третий Лок - 0
Слово - второй Лок - 0
Слово - первый Лок - 0
Добро пожаловать в Stack Overflow. Пожалуйста, найдите время, чтобы прочитать [The Tour] (http: // stackoverflow.com/tour) и обратитесь к материалу из [Справочного центра] (http://stackoverflow.com/help/asking) о том, что и как вы можете задать здесь. –
Какая ошибка точно была произведена, компиляция не удалась? –
@ABusyProgrammer Ошибка была - В функции 'int main()': 23:42: error: передача 'const std :: vector' как 'this' аргумент 'void std :: vector <_Tp, _Alloc> :: push_back (const value_type &) [с _Tp = int; _Alloc = std :: распределитель ; std :: vector <_Tp, _Alloc> :: value_type = int] 'отбрасывает квалификаторы [-fpermissive] –
cplusplusnoob