为什么 c++ 映射值不针对同一键更新?
Why c++ map value don't update for same key?
这是我的代码:
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
的预期行为是不覆盖映射中的现有条目。
对预期行为使用insert_or_assign
(C++17(。在较旧的C++版本中,将赋值与operator[]
一起使用来更新(或插入(元素。
那么为什么引入insert_or_assign
呢?从上面的链接:
insert_or_assign返回比 operator[] 更多的信息,并且不需要映射类型的默认可构造性。
std::map::insert
不会修改映射中已有的元素。相反,它插入新元素。返回类型允许检查插入是否成功(即还没有具有相同键的元素(。
您可以使用operator[]
添加新元素或修改现有元素:
m[make_pair(1,2)] = "izm";
std::map::insert 不会更新现有元素。 您可以使用insert_or_assign或运算符 []。
std::map::insert
(您使用的那个(的签名如下所示:
template< class T >
std::pair<iterator, bool> insert(T&& v);
正如您在签名中看到的,返回值是一个std::pair
,该对的第二个元素是布尔值,显示v
是否已插入到 map 中。
相关文章:
- (SFML)按下键时,播放器构造函数未使用正确的动画进行更新
- 为什么 c++ 映射值不针对同一键更新?
- 在unordered_multimap中精确迭代一次每个键的有效方法
- 如何从一组具有从左到右优先级的整数值创建有序整数键?
- 在删除之前更新一组元素指针中的元素
- 更新与多个线程unordred_map中的不同现有键对应的值
- 从另一个线程更新QT小部件的一种详细方法
- 如何在长时间计算中进行C 的一次进度更新
- 如何在一段时间内更新 QLabel?
- 如何使用推力将相同键从一个数组复制到另一个数组的值
- 用于在数组中找到零并切换标志 更新另一个数组的循环的SSE优化
- 带有符号API的MXNET:批处理归一化更新
- 在C++中,文件中的下一条记录被非法更新
- 如何使用密钥 2 更新 STL 映射键 1 并将值复制到键 2 中
- 使用 GLFW 一次处理多个键输入
- 如何创建Google+Plus一键,同时已经使用GooglePlay游戏服务SDK for C++实现了排行榜
- 在Qt/QML中的每一帧更新图像时运行时崩溃
- 一键构建所有配置和平台
- 使用批处理文件使用 Cmake & Msbuild (vs2010) 一键构建我的项目
- QML - 一键锁定/解锁屏幕方向(安卓和最终的 ios)