-4

我有奇怪的问题。我声明了 map::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 回答