为什么 c++ 映射值不会为相同的键更新?

Imt*_*edi 4 c++ stl

这是我的代码:

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”应该在这里打印.这里有什么问题?

ypn*_*nos 9

这是insert不覆盖地图中现有条目的预期行为。

insert_or_assign(C++17) 用于您期望的行为。在旧的 C++ 版本中,使用赋值 withoperator[]来更新(或插入)一个元素。

那么为什么要insert_or_assign介绍呢?从上面的链接:

insert_or_assign 返回的信息比 operator[] 多,并且不需要映射类型的默认可构造性。


jua*_*nza 5

std::map::insert不会修改地图中已经存在的元素。相反,它插入了新元素。返回类型允许检查插入是否成功(即不存在具有相同键的元素)。

您添加新元素修改现有元素operator[]

m[make_pair(1,2)] = "izm";
Run Code Online (Sandbox Code Playgroud)

  • 您还可以使用“operator[]”“插入”元素 (2认同)