3

以下は、マガジン内の単語数を取得する C++ コードです。値が存在しない場合は単語を追加し、存在する場合はインクリメントしようとしています。

unordered_map<string,int>hash;
vector<string> magazine(m);

for(int i = 0;i <m;i++)
{
   cin >> magazine[i];
   if(hash[magazine[i]]>0)
       hash[magazine[i]]++;
   else
    hash.emplace(magazine[i],1);
}

しかし、出力しようとすると、すべてのマガジン キーが値として 0 を返します。理由はありますか?

4

3 に答える 3

1

次の操作を行って、誤ってマップに新しい要素を作成しています。

if(hash[magazine[i]]>0)

map<>::operator[]挿入、値の初期化(あなたのケースではその値はゼロです)を行い、値の参照をすべて非常に慎重に返します。

多くのコメントで正しく示唆されているように、最良の方法は次のとおりです。

hash[key]++ 

続きを読む。

于 2016-10-24T07:19:02.240 に答える
1

if(hash[magazine[i]]>0)キーが存在しない場合、新しいアイテムを作成します。

あなたが本当に欲しいのは:

if(hash.find(magazine[i])!=hash.end())

@juanchopanza が述べたように、分岐は必要ありません。std::unordered_map::operator []次のように処理できます。

hash[magazine[i]]++;
于 2016-10-24T07:19:22.800 に答える