為什么訪問嵌套 C 映射中的內部映射有時只會更新可通過外部映射訪問的值?具體來說,為什么下面代碼中的 case 1 和 case 3 不更新 value m[500]["text"]?
我的理解是,在所有這些情況下,對外部地圖的索引都會回傳對內部地圖的參考。那么為什么只有第二種情況才能正確更新外部地圖呢?案例 1 和 3 是否獲取內部映射的值而不是對其的參考?
#include <iostream>
#include<map>
using namespace std;
int main()
{
map<int, map<string, int>> m1;
map<int, map<string, int>> m2;
map<int, map<string, int>> m3;
auto inner = m1[500];
inner["text"] = 10;
map<string, int> *ptr = &m2[500];
(*ptr)["text"] = 20;
map<string, int> inner3 = m3[500];
inner3["text"] = 30;
cout << "inner " << inner["text"] << " map " << m1[500]["text"] << endl;
cout << "ptr " << (*ptr)["text"] << " map " << m2[500]["text"] << endl;
cout << "inner3 " << inner3["text"] << " map " << m3[500]["text"] << endl;
return 0;
}
這將列印出以下內容:
inner 10 map 0
ptr 20 map 20
inner3 30 map 0
我希望所有 3 都列印非 0 值,但只有第二種情況。
uj5u.com熱心網友回復:
auto inner = m1[500];
...
map<string, int> inner3 = m3[500];
auto不能推斷參考。這兩個陳述句都將創建內部映射的副本。修改這些只會更新副本而不是原始值。
在這兩種情況下都使用參考來達到預期的效果:
auto& inner = m1[500];
...
map<string, int>& inner3 = m3[500];
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/450299.html
