0

这是我的代码:

std::map<std::string, std::string> map = {{"a","b"},{"c","d"}};
for(auto& [key,value] : map) {
    key = std::string("c");
    value = std::string("c");
}

当我编译它时,我得到

error: no viable overloaded '='

我做错了什么?不key应该value参考string吗?

4

1 回答 1

1

a 中的键值std::map是一个常数。由于映射的排序顺序取决于键的值,如果您更改键,您可能会破坏该排序并在错误的位置有一个节点。

在您的代码中,key将是 a const string &,而value将是 a string &(因此您可以更改值)。

如果需要更改映射中条目的键,则需要从映射中提取值,擦除原始值,然后使用新键重新插入值。

于 2020-04-05T22:41:08.210 回答