Insert函数不适用于2 if语句C++



我是C++的新手,很困惑为什么这行代码不起作用。

if(choice == 1){
if(mp[name] == 0){
mp.insert(make_pair(name, marks));
cout << 1;
}

下面列出了整个程序。

#include <bits/stdc++.h> 
using namespace std; 

int main() 
{ 

// initialize container 
map<string, int> mp, mp1; 
int choice, marks;
string name;
cin >> choice;
cin >> name;
cin >> marks;
if(choice == 1){
if(mp[name] == 0){
mp.insert(make_pair(name, marks));
cout << 1;
} else {
mp[name] += marks;
}
}
mp1.insert(mp.begin(), mp.end());
for(auto itr = mp1.begin(); itr != mp1.end(); ++itr){
cout << itr->first << 't' << itr->second << 'n';
}
cout << mp1[name];
return 0;
}

错误似乎在double-if语句中。运行代码时,执行if语句是因为打印了1。但是,插入命令永远不会执行。如果我去掉If语句,insert命令似乎可以正常工作。我找了好几个小时的答案都没有结果。我是C++和StackOverflow的新手,如果有任何帮助,我将不胜感激。

您的代码有几个问题:

map<string, int> mp, mp1;

你声明了一个map,但从未初始化map的值,记住这是C++,没有默认的初始化器,还有

if(mp[name] == 0){
mp.insert(make_pair(name, marks));
cout << 1;
}

不会运行,比如99.99%的时间。。。。除非你非常幸运,并且不知何故,未定义的行为将值初始化为0。

由于您的问题已经在评论中说明,我建议您使用std::map::find

#include <iostream>
#include <map>

int main() 
{ 
std::map<std::string, int> mp;
mp["ex"] = 0;
auto it = mp.find("ex");

if(it != mp.end())
{
it->second = 1;
}
std::cout << mp["ex"]; // Outputs 1
}

这搜索一个迭代器,该迭代器对中的第一个值是"0";ex";,检查它是否不等于最后一个迭代器(如果找不到这样的迭代器,则为默认值(,将对中的第二个值初始化为1,然后输出。有关std::map::find的更多信息,请访问此

最新更新