-4

奇妙な問題があります。map::iterator の iterator を宣言しましたが、動作しません。問題はどこですか?

 string name "John";
    int count = 200;
    map<string,int> store;
    map<string,int>::iterator it;

it = store.find( name );

            if ( it != store.end() )
            {
                it->second += count;
            } else
            {
                store.insert( make_pair (name, count) );
            }
4

2 に答える 2

5

「機能しない」とはどういう意味かわかりませんが、コードを大幅に簡素化できます。

store[name] += count;

説明:store[name]エントリが存在しない場合は、マップされた値で構築された値でエントリを追加します。この場合、マップされた型はintであるため、ゼロ初期化されます。

于 2013-05-19T15:56:42.003 に答える
2

作成したコードは、更新された C++ コンパイラで動作するはずです。

コードに含めるのを忘れていると思います<map>。このライブコードを参照してください:

#include <iostream>
#include <string>
#include <map>

using namespace std;

int main()
{
    string name = "John";
    int count = 200;
    map<string, int> store;
    map<string, int>::iterator it;

    it = store.find(name);

    if (it != store.end())
    {
        it->second += count;
    }
    else
    {
        store.insert(make_pair(name, count));
        cout << "ADDING NEW VALUE" << endl;
    }
}

出力

ADDING NEW VALUE

メソッドstd::map::findは反復子を返し、コードはそれをうまくキャッチして使用します。

于 2013-05-19T16:09:21.497 に答える