这是我的代码:
map <pair<int,int> ,string> m;
m.insert(make_pair(1,2),"imtiaz");//making key value pair
m.insert(make_pair(8,3),"moin");
m.insert(make_pair(1,2),"izm");
cout<<m[make_pari(1,2)]<<endl; //print value for key 1,2
output:
imtiaz
Run Code Online (Sandbox Code Playgroud)
我们知道如果我们在地图中为现有键插入一个值,它会更新值。这里对于同一个键 (1,2) 我插入两个值“imtiaz”和“izm”。所以,最新的值“izm”应该在这里打印.这里有什么问题?
这是insert不覆盖地图中现有条目的预期行为。
将insert_or_assign(C++17) 用于您期望的行为。在旧的 C++ 版本中,使用赋值 withoperator[]来更新(或插入)一个元素。
那么为什么要insert_or_assign介绍呢?从上面的链接:
insert_or_assign 返回的信息比 operator[] 多,并且不需要映射类型的默认可构造性。
std::map::insert不会修改地图中已经存在的元素。相反,它插入了新元素。返回类型允许检查插入是否成功(即不存在具有相同键的元素)。
您添加新元素或修改现有元素operator[]:
m[make_pair(1,2)] = "izm";
Run Code Online (Sandbox Code Playgroud)