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

コンパイルとビルドは良好です。しかし、実行した後、セグメンテーション違反が発生しました。助けが必要です 私のコードのどこが悪いのか本当にわかりません。本当にありがとう!

4

2 に答える 2

3

要素を持つように本のベクトルを割り当てたことはありません。この行を試すと:

book[1] = "hello";

メモリを割り当てていないときに何かを保存しようとしています。

試す:

book.push_back("hello");

代わりは。

これを行うこともできます:

vector<string> book(4);
book[1] = "hello";
...
于 2012-10-19T05:15:40.700 に答える
1

bookベクトル内の単語にスペースを割り当てていません。このようにしてみてください:

vector<string> book(4);
book[0] = "hello";
book[1] = "world";
book[2] = "hello";
book[3] = "world2";

push_back()または、後ろに 1 つずつ挿入するために使用することもできます。

さらに、インデックスは 0 から始まるため、1..4 を使用すると、4 ではなく 5 要素のベクトルが必要になり、必要以上のメモリを使用することになります。

于 2012-10-19T05:18:05.597 に答える