概述
遇到一些bug,检查代码,似乎没有问题,运行,出错。仔细检查,发现针对map变量,插入时候使用了find与insert。但是之前有个查询函数中却直接调用[]重载符去判断second变量是否为空。
针对map而言,insert和[]还是有一些差别。使用find查找,未找到返回空迭代器。使用[],则一定给程序返回一个结果,如果未找到对应的键信息,则自行构造一个默认键值对,值为空。同理,当直接使用[]对某个键进行赋值操作,例如 mapTmp[2] = 22;如果键值2不存在,则构造pair<int,int>(2,22)的数据。如果键值存在,则直接进行修改。
int main()
{
map<int, int> mapTmp;
mapTmp.insert(std::make_pair(1,101));
cout << "size:"<<mapTmp.size() << endl;
for (auto &it : mapTmp)
{
cout << "first:" << it.first << " second:" << it.second << endl;
}
auto &itse = mapTmp[2];
cout << "size:" << mapTmp.size() << endl;
for (auto &it : mapTmp)
{
cout << "first:" << it.first << " second:" << it.second << endl;
}
mapTmp[2] = 102;
cout << "size:" << mapTmp.size() << endl;
for (auto &it : mapTmp)
{
cout << "first:" << it.first << " second:" << it.second << endl;
}
return 0;
}
同样,对于一个人而言。定向思维,不是一件好事。线上在数据库因为一些原因回档之后出现问题,思维定式告诉我,这个代码运行了很多次,经历了三次大型测试,肯定没有问题。一定是数据回档导致。而后将数据库中内容导出,发现数据内容与程序预定逻辑南辕北辙,似乎一些都在告诉我,你没错,是回档导致的一些莫名的小问题。
实际上,问题其实很简单。在他人仅用三十分钟解决掉了之后,我才发现自己跳到了自己的“圈子里”。永远在自己的“圈子里”数羊的人,又怎么会注意栅栏的破洞。太多类似的情景,告诉我们,思维定式容易将人留在自己的“世界里”。这个世界,没有真实、没有光明、没有方向,有的只是无穷无尽、应接不暇的恭维、盲目、自以为是。这种思维定式,我有时候也叫他执念,执念如饮酒,有些人饮酒可以仗剑走天涯,意气风发,拂袖一洒,留万世佳名,歌一曲神话。有些人则相差甚远。emmmmm,真能扯。。。
最后
以上就是朴实时光为你收集整理的map的insert和[]的区别的全部内容,希望文章能够帮你解决map的insert和[]的区别所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复