我有一个问题,迭代地图并更改其中的值

时间:2015-01-04 09:02:44

标签: c++ loops dictionary stl

我很难遍历地图并更改其中的值。

cout << "HELLO! Please enter your name to sign up" << endl;
            cin >> name;
            for (it1 = abcCustomers.begin(); it1 != abcCustomers.end(); it1++)
            {
                if (it1->first == name)
                {
                    invalid = true;
                }
                else
                {
                    it1->second.setName(name);
                    it1->first = name;
                }
            }

首先,它甚至没有进入for循环。其次,它给了我一个错误 &#34; it1-&gt;首先=名;&#34;

error C2678: binary '=' : no operator found which takes a left-hand operand of type 'const std::string' (or there is no acceptable conversion)

谢谢!

1 个答案:

答案 0 :(得分:3)

std::map是容器键/值对,其中键是不可变的。

错误消息正是因为您尝试分配给声明为常量且无法更改的it1->first。如果要更改元素的键,则需要删除该对并插入一个新元素。

此外,您正在循环并尝试更改不匹配的第一个元素,对我来说它并没有多大意义。看起来你只是尝试添加一个新元素,如果还没有,这可以通过以下方式完成:

if (abcCustomers.find(name) != abcCustomers.end()) {
    invalid = true;
} else {
    abcCustomers[name] = name;
}

使用std::map::find也比迭代地图的所有元素快得多,因为它是O(log N)操作而不是O(N)。这实际上是创建std::map的主要原因。