#include <unordered_map>
#include <iostream>
#include <string>
#include <vector>
#include <utility>
#include <algorithm>
using namespace std;
unordered_map <string, int> setupDictionary(vector<string> book)
{
unordered_map<string, int> table;
for (int i =0;i< book.size(); i++)
{
string word = book[i];
if(word != "")
{
if (table.find(word)==table.end())
{
std::pair<std::string,int> myshopping (word,0);
table.insert(myshopping);
}else
{
int num = table[word];
std::pair<std::string,int> myshopping (word,num+1);
table.insert(myshopping );
}
}
}
return table;
}
int main()
{
vector<string> book;
book[1] = "hello";
book[2] = "world";
book[3] = "hello";
book[4] = "world2";
unordered_map < string, int> dict= setupDictionary(book);
// printf("%s,%d",dict["hello"]);
}
编译和构建是好的。 但是在我运行它之后,我得到了分段错误。 需要帮忙 我真的不知道我的代码中有什么问题。 谢谢你!
答案 0 :(得分:3)
您从未将书籍矢量分配给任何元素。当你尝试这一行时:
book[1] = "hello";
当你没有分配内存时,你正试图存储一些东西。
尝试:
book.push_back("hello");
代替。
你也可以这样做:
vector<string> book(4);
book[1] = "hello";
...
答案 1 :(得分:1)
您没有为book
向量中的字词分配空格。试试这样:
vector<string> book(4);
book[0] = "hello";
book[1] = "world";
book[2] = "hello";
book[3] = "world2";
或者您可以使用push_back()
逐个插入它们。
另外,索引从0开始,所以如果你使用1..4你需要一个5元素向量而不是4,你使用的内存比你需要的多。