c ++ unordered_map让我遇到了段错误

时间:2012-10-19 05:12:08

标签: c++

#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"]);
}

编译和构建是好的。 但是在我运行它之后,我得到了分段错误。 需要帮忙 我真的不知道我的代码中有什么问题。 谢谢你!

2 个答案:

答案 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,你使用的内存比你需要的多。