我很难遍历地图并更改其中的值。
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)
谢谢!
答案 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
的主要原因。