字符串到字符串映射上的结构化绑定不起作用

Structured bindings on a map of string to string not working

这是我的代码:

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 '='

我做错了什么? keyvalue 不应该引用 string 吗?

std::map中的键值为常量。由于地图的排序顺序取决于键的值,如果您更改键,您可能会破坏该排序并在错误的位置放置节点。

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

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