字符串到字符串映射上的结构化绑定不起作用
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 '='
我做错了什么? key
和 value
不应该引用 string
吗?
std::map
中的键值为常量。由于地图的排序顺序取决于键的值,如果您更改键,您可能会破坏该排序并在错误的位置放置节点。
在您的代码中,key
将是 const string &
,而 value
将是 string &
(因此您可以更改值)。
如果您需要更改映射中条目的键,您需要从映射中提取值,删除原始值,然后使用新键重新插入值。
这是我的代码:
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
吗?
std::map
中的键值为常量。由于地图的排序顺序取决于键的值,如果您更改键,您可能会破坏该排序并在错误的位置放置节点。
在您的代码中,key
将是 const string &
,而 value
将是 string &
(因此您可以更改值)。
如果您需要更改映射中条目的键,您需要从映射中提取值,删除原始值,然后使用新键重新插入值。