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

标签 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

我们知道如果我们在 map 中为现有键插入一个值,它将更新该值。这里对于同一个键 (1,2) 我插入两个值“imtiaz”和“izm”。所以,最新的值“izm”应该打印在这里.这里有什么问题?

最佳答案

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

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

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

insert_or_assign returns more information than operator[] and does not require default-constructibility of the mapped type.

关于c++ - 为什么 c++ 映射值不会为相同的键更新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59899302/

相关文章:

c++ - 可以在一个文件中定义两个 `istream_iterator` 吗?

c++ - 设计此代码的最佳方式?

c++ - 当我需要通过指针传递时(而不是通过引用传递)

c++ - 使用可变模板参数的构造函数和函数

c++ - std::按成员查找对象

c++ - STL迭代器和数组的关系

c++ - 将数据从 std::vector 传递到 std::valarray 的最有效方法

c++ - 有没有一种简单的方法可以判断文件流是否打开了目录而不是文件?

c++ - 无法编译 MEX

c++ - 如何在 C++ 中创建分组多映射键和关联值表